Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
Chippollino.01
Member

Откуда: изнемагаю
Сообщений: 35527
Сейчас из ResultSetType_SingleRow значения столбца "источникХХ" по имени помещается в переменную User::ИсточникХХ
а переменная потом передается в подключение (имя файла для ExcelFilePath в диспетчере соединений)
их много и и для каждого свой столбец
решение плохо маштабируется
очевидно проще будет если имена файлов будут в строках,
но получить их аналогично это значит загромоздить пакет десятком Execute SQL с фильтром

можно получить сразу все ResultSetType_Rowset
IdИсточника,значение для конкретного подключения
как потом распихать значения строк по переменным, которые используются в подключениях
или засунуть в конкретное подключение значение конкретной строки?

на вскидку пришло решение тупо получить строку содержащую все значения через разделитель,
а потом найти конкретное значение по сигнатуре IdИсточника строковыми функциями,
но както это коряво.

делается это чтобы пакеты подсасывающие кучу экселек
могли узнать пути к этим файлам и их названия из БД где юзер сможет через морду настраивать
11 ноя 15, 19:50    [18402403]     Ответить | Цитировать Сообщить модератору
 Re: Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 594
Chippollino.01
Сейчас из ResultSetType_SingleRow значения столбца "источникХХ" по имени помещается в переменную User::ИсточникХХ
а переменная потом передается в подключение (имя файла для ExcelFilePath в диспетчере соединений)
их много и и для каждого свой столбец
решение плохо маштабируется
...

делается это чтобы пакеты подсасывающие кучу экселек
могли узнать пути к этим файлам и их названия из БД где юзер сможет через морду настраивать


Если у вас SSIS 2008 - смотрите package configurations - там можно сохранить строки подключения в спец таблице (которую до этого нужно создать) и затем - при загрузке - пакет будет грузить строки подключения.
Для SSIS 2012 - можете использовать Connection Manager из проекта или из переменных среды. Или способ, описанный выше.
12 ноя 15, 08:44    [18404016]     Ответить | Цитировать Сообщить модератору
 Re: Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
Chippollino.01
Member

Откуда: изнемагаю
Сообщений: 35527
2012
сейчас грузятся из переменных среды
вопрос акурат в инициализации этих переменных
сейчас они загружаются из столбцов SingleRow
это не удобно
напрашивается ResultSetType_Rowset
потом цикл по каждому элементу
где для каждого проверить есть ли подключение с именем из столбца А
и если есть записать ему строку подключения из столбца Б
источники определяются динамически из вешнего приложения
и доступны пакету через хранимую процедуру
12 ноя 15, 10:41    [18404566]     Ответить | Цитировать Сообщить модератору
 Re: Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 594
Chippollino.01,

Гм... Насколько вас понял, у вас есть переменные среды, в них вы храните connection strings. И хотите обновлять их.
Подходы:
1. Сделать прикладуху чтобы она при запуске пакета определяла параметры. А параметры определять в GUI пользователем.
2. Сделать прикладуху чтобы она через GUI правила значения env variables. C помощью вызова [SSISDB].[catalog].[set_environment_variable_value]
3. Есть еще одна БД со строками подключений, GUI к ней и требуется обновлять env variables, через SSIS.
  • Делаем запрос, возвращающий имя переменной и ее содержимое, для всех изменяемых переменных.
  • В SSIS пакете - выполняем запрос и результат извлекаем как full result set. Далее в цикле парсим результат и для каждой строки - вызываем хранимую процедуру [SSISDB].[catalog].[set_environment_variable_value]

    Ссылки как извлекать full result set и парсить.
  • 12 ноя 15, 11:00    [18404701]     Ответить | Цитировать Сообщить модератору
     Re: Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
    Владислав Колосов
    Member

    Откуда:
    Сообщений: 8828
    Кладите файлы в одну папку, сделайте цикл по файлам. Никаких имен не нужно при этом знать.
    12 ноя 15, 12:34    [18405445]     Ответить | Цитировать Сообщить модератору
     Re: Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
    Chippollino.01
    Member

    Откуда: изнемагаю
    Сообщений: 35527
    Там пакет устроен таким образом, что один и тот же пакет засасывает разные файлы в зависимости от настроек в БД.
    2 Ferdipux
    3-й вариант то что надо
    как извлекать full result set понятно
    непонятно как парсить в зависимости от значения одного столбца положить значение другого в переменную имя которой во втором столбце
    по второму тынцу както на полуслове обрывается
    ну извлекли значение столбца из коллекции по индексу в переменную и что дальше?
    Как различать строки и значения разных строк распихать по разным переменным?
    12 ноя 15, 14:36    [18406480]     Ответить | Цитировать Сообщить модератору
     Re: Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
    Ferdipux
    Member

    Откуда: Москва
    Сообщений: 594
    Chippollino.01,

    Вы хранимой процедуре скармливаете название папки где хранится env variable, название env, название variable и ее значение.
    Предполагаю, что вы эти значения или знаете при конструировании SSIS или можете извлечь из результата запроса.
    Пример - запросом вытаскиваете 2 столбца - название переменной (название connection manager, название excel файла) и ее значение (путь). Меппите на 2 переменной - VarName и VarValue, а затем - вызываете хранимку с параметрами.
    12 ноя 15, 16:33    [18407296]     Ответить | Цитировать Сообщить модератору
     Re: Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
    Chippollino.01
    Member

    Откуда: изнемагаю
    Сообщений: 35527
    понятно, както коряво получается, чтобы из пакета изменить значение переменной пакета вызывать хранимку, которая поменяет его снаружи.
    пока сделал через одну строку тупо скопипастив 12 вызовов и смапив конкретные переменные с запросом единичного значения
    12 ноя 15, 18:11    [18408110]     Ответить | Цитировать Сообщить модератору
     Re: Значение конкретной строки из набора полученного от Execute SQL в переменную SSIS  [new]
    Ferdipux
    Member

    Откуда: Москва
    Сообщений: 594
    Chippollino.01,

    Ну, на вкус и цвет... Вы же меняете параметр конфигурации, который будет использоваться другими пакетами. И для них он - внешний из каталога SSISDB, поэтому и требуется хранимка.
    Важное замечание - в пакете, настраивающем строки доступа, не получится использовать обновленную конфигурацию. Это вспомогательный пакет. Причина -- Conn Mgr инициализируются значениями в момент загрузки пакета, в процессе работы Conn Manager, imho, уже не поменять.
    12 ноя 15, 20:46    [18409014]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить