Как обработать пустой результат запроса в задаче DataFlow?

Я перебираю несколько лет с потоком данных внутри цикла по каждому элементу, но есть несколько лет, которые не будут возвращать никаких данных, поэтому их пакет служб SSIS дает сбой, есть ли способ справиться с этим? Чтобы сказать пакету игнорировать эти пробелы и продолжать выполнение?

Спасибо,

2 ответа

Решение

Один из подходов, который вы можете использовать, если вы не хотите касаться того, как данные передаются Foreach составная часть:

  1. Вы можете включить дополнительный Execute SQL Task компонент внутри Foreach контейнер, который сначала проверяет, есть ли данные для обработки.

  2. Создайте переменную, для которой ваша задача SQL будет устанавливать количество записей, например @cntProceed

  3. Установите этот компонент для запуска перед задачей Dataflow.

  4. Измените ограничение приоритета (зеленая стрелка из задачи SQL в задачу Dataflow). Установить evaluation operation в Expression and Constraint, Value в Success, а также Expression в @cntProceed != 0

Что все это делает: Внутри компонента / контейнера foreach он сначала проверяет, существуют ли какие-либо данные для работы. Это то, что будет делать дополнительный компонент, и если есть данные для использования, он перейдет к компоненту потока данных. В противном случае это "each" (или, скорее.. что один цикл) закончится и Foreach перейдем к следующему.

Я не уверен, почему поток данных потерпит неудачу, если запрос возвращает 0 строк. Одним из возможных решений является опрос ваших данных за действительные годы и повторение только за действительные годы. Это может быть сделано:

  1. Создайте задачу "Выполнение SQL" перед контейнером цикла ForEach.
  2. Установите для ResultSet полные строки для задачи "Выполнение SQL"
  3. Установите вкладку Result Set в переменную объекта
  4. Установите для контейнера ForEach Loop перечислитель ForEach ADO
  5. Установите переменную источника объекта ADO в переменную объекта
  6. Установите сопоставления переменных в переменную года
  7. Передайте год в качестве параметра для потока данных.

Можете ли вы посмотреть код на упаковке и опубликовать это? Я был бы рад узнать, смогу ли я продублировать проблему, с которой вы столкнулись, и дать вам решение, которое более точно соответствует вашим заявленным потребностям.

Другие вопросы по тегам