Звонят на работу и результат сложного выбора в рамках одной процедуры в SQL


У меня есть задание SSIS и относительно сложный select, которые используют одни и те же данные. Я должен сделать так, чтобы мой клиент не должен был звонить им по отдельности, а использовать одну вещь, чтобы получить результат выбора и позвонить на работу.

Мой первоначальный план состоял в том, чтобы создать процедуру, которая будет принимать необходимые входные данные, а затем выводить табличную переменную с результатом select.

Однако, прочитав документацию Microsoft, я обнаружил, что табличные переменные не могут содержать результат с более чем 100 строк, в то время как я мог бы выбрать ~10 000 строк. А теперь я в тупике. Как лучше всего вызвать задание и выбрать данные из одного компонента?

У меня есть разрешения на создание представлений, процедур и редактирование задания служб SSIS. Пользователь предоставит мне 2 параметра.

1 2

1 ответ:

Вот как я бы предложил вам поступить в этом сценарии, чтобы убрать сложность из SSIS.

  1. создайте SP, который вы хотели; но вместо табличной переменной; вставьте выходные данные в таблицу. Эта таблица может быть добавлена на лету (динамически с помощью скрипта CREATE TABLE) или может существовать в БД, всегда доступной в качестве буфера.
  2. вызовите этот SP в потоке управления.
  3. в задаче потока данных выберите из этой таблицы буфера.
  4. после завершения SSIS работайте, очищайте буферную таблицу, то есть усекайте таблицу.

Предостережение: вы можете столкнуться с проблемой в сценариях параллелизма; чтобы устранить ее, вы должны иметь столбец BatchID или BatchStartTimeStamp, который может хранить уникальное значение для каждого запуска.

Вы можете передать данные для BatchID или BatchStartTimeStamp из пакета SSIS.