SSIS - динамическая циклическая обработка нескольких баз данных

Я должен консолидировать данные из 1000 + баз данных, имеющих одну и ту же структуру / таблицы в одном уникальном БД. DB могут быть добавлены и удалены потенциально на ежедневной основе, поэтому мне нужно динамически извлекать список БД и запускать динамически сгенерированный SQL-запрос для извлечения данных по каждому из них.

Я разработал поток данных с запросом переменной, которая работает нормально, если выполняется со статическим значением:

введите описание изображения здесь

С задачей SQL я получаю список экземпляров, я их перебираю и с помощью вложенной задачи Loop / SQL Foreach я получаю имена базы данных и создаю динамический SQL со следующим утверждением (имя базы данных анонимно):

SELECT 'select' '' + name + '' 'как DatabaseName, ID из' + name + '. [Dbo]. [Заказы] как querytext FROM sys.databases WHERE name LIKE (' XXX% _% ');

Эта часть также отлично работает:

введите описание изображения здесь

Как я могу использовать результат задачи SQL «Выполнение SQL-задачи - Получить текст запроса» в качестве запроса, который должен быть выполнен в источнике «OLE DB Source 1» (часть «Задача 3 потока данных»)?

Я попытался сопоставить объектную переменную «User :: SqlCommandFromSQLTask» в результирующем наборе задачи SQL, а затем установить ее как переменную источника объекта ADO и задачу скрипта преобразовать ее в строку и передать значение переменной SqlStringFromSQLTask3 (используемой как источник в «OLE DB Source 1»), но я получаю ошибку «Нарушение ограничения PRIMARY KEY», например, если поток данных всегда работает со статическим значением, которое я настроил по умолчанию:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Хотя, если я удалю значение из панели переменных, я получаю сообщение об ошибке «Текст команды не был установлен для объекта команды». Даже изменение свойства DelayValidation потока данных на false.

Буду признателен за любую оказанную помощь.

sql-server,ssis,etl,dynamic-sql,

5

Ответов: 1


0

Когда я использовал SSIS для подключения к нескольким ящикам SQL Server, я сохранил эти строки соединения SQL Server в таблице в центральной базе данных. Затем я использую запрос этой таблицы в качестве входа в задачу потока потока foreach. Если нам когда-либо придется изменить строку подключения к серверу sql, что происходит, мы просто обновляем эту таблицу с самым новым значением.

SQL-сервер, SSIS, ETL, динамический SQL,
Похожие вопросы