#ssis #ssis-2016 #ssis-2019
#ssis #ssis-2016 #ssis-2019
Вопрос:
У меня есть простое задание, которое собирает идентификаторы сотрудников и отправляет их в вызов API, который принимает только один идентификатор сотрудника за раз. У меня есть эта настройка с использованием a ForEach Loop Container
, передаваемого an Execute SQL Task
.
Задание выполняется, как и ожидалось, но оно выполняет цикл только по верхней N записи.
Моя задача выполнения SQL возвращает полный набор результатов в переменную. Моя переменная задана как объектный тип данных.
У меня установлен цикл ForEach Foreach ADO Enumerator
, который затем сопоставляется с моей переменной.
Когда я запускаю задание, я не получаю конкретное сообщение об ошибке, сообщающее мне, что я делаю неправильно, но оно завершается сбоем в цикле ForEach, как показано
Что-нибудь еще, на что я могу обратить внимание?
Ответ №1:
Задача Execute SQL должна помещать результаты в переменную SSIS объектного типа. Я предполагаю associateOID
, что это строковый тип, да?
Что вам нужно сделать, это создать переменную SSIS, называемую чем-то вроде rsEmployees
типа Object . Затем ваш результирующий набор в Execute SQL Task будет сопоставлен с User::rsEmployees
Измените перечислитель ADO цикла Foreach, чтобы использовать переменную User::rsEmployees
На этом этапе пакет выполнит и сохранит результаты в нашей переменной rsEmployees, а затем перечислитель Foreach выполнит итерацию по записям в нашем наборе. Последняя часть — что-то сделать с текущей строкой. Вот где ваш User::associateOID
вступает в игру.
На вкладке Сопоставления переменных перечислителя Foreach добавьте User::associateOID к порядковому номеру 0. Это обеспечит связь между «текущей строкой», которая уничтожается в счетчике, и нашими переменными SSIS
Комментарии:
1. Я обновил свой вопрос. Я использую объектный тип данных для [User::assocaiteOID] . Похоже, я делаю все, что вы предложили, но использую только одну переменную. Когда я добавляю вторую переменную, пакет больше не будет выполняться.
2. Вы должны использовать две переменные.
Object
это единственное, что может обрабатывать более одного результата из задачи Execute SQL, и вам нужна переменная, зависящая от типа, которая будет использоваться в любом другом бите компонента SSIS.3. Я вас совершенно неправильно понял. Похоже, теперь мы в деле! У меня был [User::associateOID], установленный как объект. Я изменил это на String и снова последовал вашим указаниям, и теперь у нас есть данные! Спасибо за вашу помощь!