Поведение цикла ForEach служб SSIS

Это типичное поведение контейнера ForEach:

http://i.stack.imgur.com/ypx7H.png

Однако, если я делаю то, что показано на изображении ниже, задача «Выполнение SQL» никогда не выполняется, как я могу добиться такого поведения? Мне не нужно использовать контейнер ForEach, если какой-то другой тип контейнера позволит мне это сделать.

Цикл for each по существу перебирает файлы в нескольких подкаталогах в папке. В зависимости от того, в какой папке находится цикл, он заполняет переменную. эта переменная используется в соединителях от задачи «некоторый сценарий» к «задаче а» и «задаче б», чтобы решить, какая задача будет выполняться. Таким образом, возможно, что обе задачи будут запущены, если файлы будут обнаружены в папках, связанных с задачами.

Мне действительно нужно, чтобы обе задачи a и b после завершения переходили к одной и той же задаче базы данных.

http://i.stack.imgur.com/GuPV3.png


person kunal    schedule 19.08.2015    source источник
comment
СПАСИБО за добавление встроенных изображений :)   -  person kunal    schedule 19.08.2015
comment
Вам действительно нужно, чтобы задачи A и B выполнялись параллельно?   -  person billinkc    schedule 19.08.2015
comment
Нет, они никогда не будут запускаться параллельно, цикл foreach выбирает путь в зависимости от того, в какой папке он находится.   -  person kunal    schedule 19.08.2015
comment
В ваших комментариях ниже. Таким образом, возможно, что обе задачи будут выполняться, если файлы будут обнаружены в папках, связанных с задачами, которые комментарий предназначен для применения ко всему циклу по каждому элементу, а не в рамках итерации? Если да, то мой ответ верен. Если бы A и B могли срабатывать для одной итерации файла, вам нужно было бы реструктурировать ваши прецедентные ограничения.   -  person billinkc    schedule 19.08.2015
comment
Я думаю, что сформулировал свое утверждение в запутанной манере. Для каждого цикла будет выбран путь по одному в зависимости от того, в какой папке находится каждый цикл. Ваши комментарии заставили меня задуматься о пути, по которому я наконец нашел решение проблемы... Спасибо!   -  person kunal    schedule 19.08.2015
comment
Моя причина изменить заголовок вашего вопроса заключается в том, что ваш вопрос касается поведения прецедентных ограничений. Тот факт, что он вложен в цикл Foreach, не имеет значения. Логика одинакова, независимо от того, находится ли она на корневом уровне потока управления или вложена в контейнер Sequence или For Loop.   -  person billinkc    schedule 19.08.2015


Ответы (2)


У вас есть два выходных пути из «Some Script Task». Они связаны с «задачей A» и «задачей b» через ограничение прецедента. Это прецедентное ограничение зеленое - так что успех, но к нему также прикреплен глиф/украшение, так что это указывает на то, что есть также выражение, которое должно быть удовлетворено, чтобы это ограничение было удовлетворено.

Я предполагаю, что срабатывает только A или B, верно?

Таким образом, поскольку только A или b могут когда-либо запускаться, «Обновить результат в БД для задачи» будет вечно ждать завершения оба из них.

Затем решение состоит в том, чтобы изменить раздел множественных ограничений предшествующего ограничения, ведущего к этой задаче «Выполнение SQL», чтобы перейти с Logical AND на Logical OR. Дважды щелкните любой разъем и измените его там. Теперь оба должны отображаться в виде зеленой пунктирной линии.

person billinkc    schedule 19.08.2015
comment
Немного подробнее: цикл for each по существу перебирает файлы в нескольких подкаталогах в папке. В зависимости от того, в какой папке находится цикл, он заполняет переменную. эта переменная используется в соединителях от некоторой задачи сценария к задаче a и задаче b, чтобы решить, какая задача будет выполняться. Таким образом, возможно, что обе задачи будут запущены, если файлы будут обнаружены в папках, связанных с задачами. - person kunal; 19.08.2015
comment
что мне действительно нужно, так это то, чтобы обе задачи a и b после завершения переходили к одной и той же задаче базы данных. - person kunal; 19.08.2015

Это оказалось решением:

Foo

person kunal    schedule 19.08.2015