Как обработать пустой результат запроса в задаче DataFlow?
Я перебираю несколько лет с потоком данных внутри цикла по каждому элементу, но есть несколько лет, которые не будут возвращать никаких данных, поэтому их пакет служб SSIS дает сбой, есть ли способ справиться с этим? Чтобы сказать пакету игнорировать эти пробелы и продолжать выполнение?
Спасибо,
2 ответа
Один из подходов, который вы можете использовать, если вы не хотите касаться того, как данные передаются Foreach
составная часть:
Вы можете включить дополнительный
Execute SQL Task
компонент внутриForeach
контейнер, который сначала проверяет, есть ли данные для обработки.Создайте переменную, для которой ваша задача SQL будет устанавливать количество записей, например
@cntProceed
Установите этот компонент для запуска перед задачей Dataflow.
Измените ограничение приоритета (зеленая стрелка из задачи SQL в задачу Dataflow). Установить
evaluation operation
вExpression and Constraint
,Value
вSuccess
, а такжеExpression
в@cntProceed != 0
Что все это делает: Внутри компонента / контейнера foreach он сначала проверяет, существуют ли какие-либо данные для работы. Это то, что будет делать дополнительный компонент, и если есть данные для использования, он перейдет к компоненту потока данных. В противном случае это "each"
(или, скорее.. что один цикл) закончится и Foreach
перейдем к следующему.
Я не уверен, почему поток данных потерпит неудачу, если запрос возвращает 0 строк. Одним из возможных решений является опрос ваших данных за действительные годы и повторение только за действительные годы. Это может быть сделано:
- Создайте задачу "Выполнение SQL" перед контейнером цикла ForEach.
- Установите для ResultSet полные строки для задачи "Выполнение SQL"
- Установите вкладку Result Set в переменную объекта
- Установите для контейнера ForEach Loop перечислитель ForEach ADO
- Установите переменную источника объекта ADO в переменную объекта
- Установите сопоставления переменных в переменную года
- Передайте год в качестве параметра для потока данных.
Можете ли вы посмотреть код на упаковке и опубликовать это? Я был бы рад узнать, смогу ли я продублировать проблему, с которой вы столкнулись, и дать вам решение, которое более точно соответствует вашим заявленным потребностям.