Поиск SSIS в нескольких идентичных базах данных

Я работаю над проектом, в котором мне нужно выполнять поиск на сервере хранилища данных в службах Integration Services. Моя проблема в том, что мне нужно иметь возможность изменить базу данных, в которой я выполняю поиск. Базы данных идентичны по дизайну.

Раньше я решал эту проблему с помощью компонента скрипта, где для каждой строки, если идентификатор базы данных изменился, соединение меняется, пример ниже

try {
  if (databaseNr != Row.DatabaseNr) {
    try {
      databaseNr = Row.DatabaseNr;
      currentCatalog = "db" + Row.DatabasNr;
      connection.ChangeDatabase(currentCatalog);
    } catch (Exception e) {
      ComponentMetaData.FireWarning(0, ComponentMetaData.Name, e.Message, "", 0);
    }
  }
string command = "SELECT Id, Name, Surname FROM [" + currentCatalog + "].[TableName] WHERE Id = '" + Row.OrderID + "'";

Но это избавило бы меня от многих проблем, если бы это было возможно с компонентом поиска.

Итак, мой вопрос: возможно ли каким-либо образом использовать данные столбца, чтобы изменить базу данных для выполнения поиска с помощью компонента поиска?

Благодарен за любую помощь!


person August    schedule 09.03.2015    source источник
comment
Базы данных находятся на одном сервере? В этом случае вы можете рассмотреть возможность динамического создания запроса поиска вне потока задач.   -  person Ako    schedule 09.03.2015
comment
Да, базы данных находятся на одном сервере. Я не совсем уверен, как это возможно, не могли бы вы объяснить подробнее?   -  person August    schedule 09.03.2015
comment
Помогите мне понять: ваш исходный запрос имеет некоторый идентификатор, указывающий, в каком каталоге находятся данные. В этих каталогах есть согласованные сущности (вероятно, вы физически сегментировали клиентов по каталогу, чтобы предотвратить смешение данных), и вам нужно выполнить некоторый запрос через их все (возможно, отчет о выставлении счетов). Это примерно точно? Как спросил Ако, возможно ли, что Client20 вдруг накопит столько данных, что вам нужно отправить их на свой собственный сервер?   -  person billinkc    schedule 09.03.2015
comment
Помогите мне понять: ваш исходный запрос имеет некоторый идентификатор, указывающий, в каком каталоге находятся данные. В этих каталогах есть согласованные сущности, и вам нужно выполнить какой-либо запрос для них всех (например, отчет о выставлении счетов). Это примерно точно? Это звучит точно. Как спросил Ако, возможно ли, что Client20 вдруг накопит столько данных, что вам нужно отправить их на свой собственный сервер? Я не уверен, если честно, это довольно простой поиск (по крайней мере, с компонентом сценария), и результаты сохраняются в виде плоских файлов, если эта информация имеет какое-либо значение.   -  person August    schedule 09.03.2015


Ответы (1)


Что вы можете сделать, это:

  • Перейти к управлению потоком
  • Выберите задачу потока данных
  • Перейти к свойствам и выбрать компонент поиска
  • Создайте выражение для поиска, вы можете повторно использовать запрос, подготовленный в задаче сценария.

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

person Ako    schedule 09.03.2015
comment
Мне нужно было бы изменить значение для каждой строки в потоке данных, потому что данные поступают в плоских файлах со смешанными идентификаторами базы данных. Я предполагаю, что нет выражения для получения значения столбца строки для каждой обрабатываемой строки. Возможно, компонент скрипта - самый простой способ сделать это. - person August; 09.03.2015
comment
Он думает, что будет очень неэффективно менять его для каждой строки. Поведение по умолчанию — предварительная загрузка данных для поиска перед запуском потока данных. Вы можете отключить его. Но рассмотрите возможность предварительной загрузки данных из всех баз данных (я не знаю размера) и добавления столбца с именем базы данных и сопоставления с ним. - person Ako; 09.03.2015
comment
Я думаю, что это работает вполне нормально, мне просто нужен лучший способ, потому что мне нужно написать этот скрипт поиска в нескольких местах. и я меняю базу данных только при изменении идентификатора. Предварительная загрузка могла бы работать, если бы она была меньше, но это своего рода огромная база данных, содержащая около 30 (идентичных) баз данных. Спасибо хоть :) - person August; 09.03.2015