Поделиться через


Контрольные точки служб SSIS не учитываются для элементов контейнера For Loop или Foreach Loop

Эта статья поможет вам обойти проблему, из-за которой контрольные точки служб SQL Server Integration Services (SSIS) не учитываются для For Loop элементов контейнера или Foreach Loop .

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 2624458

Симптомы

Рассмотрим следующий сценарий.

  • Вы устанавливаете microsoft SQL Server Integration Services на компьютере.

  • Вы создаете пакет служб SSIS, содержащий элемент контейнера цикла for, за которым следует контейнер последовательности.

  • Как контейнер для цикла, так и контейнер последовательности имеют один из следующих элементов:

    • Задача "Выполнение SQL" (ИЛИ)
    • Две или более задач SQL Execute SQL, которые выполняются параллельно.
  • Вы включите параметр Контрольная точка для пакета служб SSIS.

  • Вы запускаете пакет служб SSIS

  • Контейнер цикла for завершается, и выполнение пакета приходит в контейнер последовательности.

  • Выполните одно из следующих действий:

    • Для пакетов с одной задачей "Выполнение SQL" выполнение пакета останавливается, пока задача еще выполняется.
    • Для пакетов, выполняющих несколько задач SQL, вы либо останавливаете выполнение пакета, либо возникает сбой в одной из этих задач, в то время как другие задачи Выполнения SQL по-прежнему выполняются.
  • Пакет служб SSIS запускается снова.

В этом сценарии пакет начинается с For Loop контейнера, а не из Sequence контейнера.

Примечание.

Эта проблема не связана с задачей "Выполнение SQL". Это может произойти и с другими задачами.

Причина

Такое поведение является особенностью данного продукта. Данные контрольных точек не сохраняются для For Loop элементов контейнера и Foreach Loop контейнера. Если дочерний контейнер в цикле успешно выполняется, он не записывается в файл контрольных точек. Таким образом, при перезапуске пакета задачи в каждом из этих элементов контейнера выполняются снова.

Обходной путь

Чтобы обойти проблему, заключите For Loop контейнер или внутри Foreach LoopSequence контейнера.