Точка останова в задаче скрипта SSIS, которая находится внутри цикла ForEach

78
9

У меня есть пакет SSIS, который имеет цикл foreach. внутри цикла foreach у меня есть задача скрипта. Я поставил точку останова в этой задаче скрипта, которая попадает, но проблема в том, что она попадает только на первую итерацию. поэтому, если F10 или F5 он не сломается снова на второй итерации.

как я могу заставить его ломаться каждый раз на одной и той же точке на каждой итерации.

спросил(а) 2021-01-19T21:10:58+03:00 6 месяцев назад
1
Решение
65

Кажется, это ожидаемое поведение SSIS, как указано в Books Online:

"Если задача Script является частью контейнера Foreach Loop или For Loop, отладчик игнорирует контрольные точки в задаче Script после первой итерации цикла".

http://technet.microsoft.com/en-us/library/ms137625.aspx

Вы можете попытаться обойти его со следующими альтернативами:

    Выполнение прерывания и отображение модального сообщения с помощью метода MessageBox.Show в пространстве имен System.Windows.Forms. (Удалите этот код после завершения процесса отладки.)

    Поднять события для информационных сообщений, предупреждений и ошибок. Методы FireInformation, FireWarning и FireError отображают описание события в окне вывода Visual Studio. Тем не менее, метод FireProgress, метод Console.Write и метод Console.WriteLine не отображают никакой информации в окне "Вывод". Сообщения из события FireProgress отображаются на вкладке "Прогресс" в SSIS Designer. Дополнительные сведения см. В разделе "Повышение событий в компоненте скрипта".

    Зарегистрировать события или пользовательские сообщения для активированных поставщиков протоколирования. Дополнительные сведения см. В разделе Вход в компонент скрипта.

http://technet.microsoft.com/en-us/library/ms136033.aspx

ответил(а) 2021-01-19T21:10:58+03:00 6 месяцев назад
45

Я знаю, что это старый вопрос, но у меня есть идея поделиться

Как мне ответил Гильерме, я могу добавить что-то полезное, если ваш foreach основан на SQL-запросе, вы можете добавить к нему ROW_NNUMBER() и назначить его переменной, внутри задачи скрипта вы можете сравнить значение этой переменной и разбить задачу на любую нужную строку.

if (Dts.Variables["Your_Variable"].Value.ToString() == "4") {
Console.WriteLine("Break");
}

По крайней мере, вы можете остановить итерирование любого места в цикле, а не первую итерацию.

ответил(а) 2021-01-19T21:10:58+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема