2012-01-04 4 views
1

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

Спасибо,

+0

Что вы переходите в цикл foreach и что у вас есть внутри цикла foreach? Пожалуйста, добавьте более подробную информацию к своему сообщению .. Это поможет нагрузкам. – Nonym

+0

Я передающая и объектная переменная в цикле foreach внутри цикла foreach. У меня есть задача потока данных (источник и адрес dle db), который использует эту переменную в запросе переменная (та, которая использует foreach) работает нормально, но, например, если в запросе используется год (переменная), у которой нет данных, тогда задача завершается с ошибкой.Я хочу обрабатывать случаи, которые не возвращают данные – user1112251

+0

FYI без данных Я имею в виду, если запрос похож на «Select * from sysobjects where =?» и нет данных за этот год. – user1112251

ответ

1

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

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

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

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

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

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

0

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

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

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

Смежные вопросы