Звонят на работу и результат сложного выбора в рамках одной процедуры в SQL
У меня есть задание SSIS и относительно сложный select, которые используют одни и те же данные. Я должен сделать так, чтобы мой клиент не должен был звонить им по отдельности, а использовать одну вещь, чтобы получить результат выбора и позвонить на работу.
Мой первоначальный план состоял в том, чтобы создать процедуру, которая будет принимать необходимые входные данные, а затем выводить табличную переменную с результатом select.Однако, прочитав документацию Microsoft, я обнаружил, что табличные переменные не могут содержать результат с более чем 100 строк, в то время как я мог бы выбрать ~10 000 строк. А теперь я в тупике. Как лучше всего вызвать задание и выбрать данные из одного компонента?
У меня есть разрешения на создание представлений, процедур и редактирование задания служб SSIS. Пользователь предоставит мне 2 параметра.
1 ответ:
Вот как я бы предложил вам поступить в этом сценарии, чтобы убрать сложность из SSIS.
- создайте SP, который вы хотели; но вместо табличной переменной; вставьте выходные данные в таблицу. Эта таблица может быть добавлена на лету (динамически с помощью скрипта CREATE TABLE) или может существовать в БД, всегда доступной в качестве буфера.
- вызовите этот SP в потоке управления.
- в задаче потока данных выберите из этой таблицы буфера.
- после завершения SSIS работайте, очищайте буферную таблицу, то есть усекайте таблицу.
Предостережение: вы можете столкнуться с проблемой в сценариях параллелизма; чтобы устранить ее, вы должны иметь столбец
BatchID
илиBatchStartTimeStamp
, который может хранить уникальное значение для каждого запуска.Вы можете передать данные для
BatchID
илиBatchStartTimeStamp
из пакета SSIS.