Контейнер «цикл по каждому элементу»

Контейнер «цикл по каждому элементу» определяет повторяющийся поток управления в пакете. Реализация цикла схожа с циклической структурой Foreach в языках программирования. Организация цикла в пакете происходит с помощью перечислителя Foreach. Контейнер «цикл по каждому элементу» повторяет операции потока управления для каждого члена заданного перечислителя.

В службах SQL ServerIntegration Services доступны следующие типы перечислителей:

  • Перечислитель ADO по каждой строке для перечисления строк в таблицах. Например, можно получить все строки в наборе записей ADO.

  • Перечислитель набора строк схемы ADO.NET для перечисления сведений схемы об источнике данных. Например, можно перечислить таблицы базы данных AdventureWorksSQL Server и вывести их список.

  • Перечислитель с циклом по каждому файлу для перечисления файлов в папке. Перечислитель может просматривать вложенные папки. Например, можно считать все файлы с расширением LOG, находящиеся в папке Windows и всех вложенных в нее папках.

  • Перечислитель по объекту из переменной для перечисления объектов, содержащихся в заданной переменной. Перечисляемым объектом может быть массив, объект DataTable ADO.NET, перечислитель служб Integration Services и т. п. Например, можно перечислить значения массива, в которых содержатся имена серверов.

  • Перечислитель Foreach Item для перечисления элементов коллекций. Например, можно перечислить имена исполняемых объектов и рабочие каталоги, используемые задачей «Выполнение процесса».

  • Перечислитель по набору узлов для перечисления результирующего набора выражения XPath. Например, указанное выражение может перечислить и вывести список всех авторов классического периода: /authors/author[@period='classical'].

  • Перечислитель по объектам SMO для перечисления объектов SMO. Например, можно перечислить представления в базе данных SQL Server и вывести их список.

На приведенной ниже диаграмме представлен контейнер «цикл по каждому элементу», в котором содержится задача «Файловая система». В цикле «по каждому элементу» используется перечислитель с циклом по каждому файлу, а задача «Файловая система» настроена для копирования файла. В заданной перечислителем папке цикл повторяется четыре раза и копирует четыре файла.

Контейнер цикла Foreach, перечисляющий папки

Для обновления свойства объекта в пакете, соответствующего значению коллекции перечислителя, можно использовать сочетание переменных и выражений для свойств. Вначале необходимо связать значение коллекции с пользовательской переменной, а затем задать выражение для свойства, которое использует указанную переменную. Например, значение коллекции, заданное в перечислителе с циклом по каждому файлу, сопоставляется с переменной с именем MyFile, а указанная переменная затем используется в выражении для свойства Subject задачи «Отправка почты». Во время выполнения пакета свойству Subject присваивается имя файла на каждой итерации цикла. Дополнительные сведения см. в разделе Использование выражений свойств в пакетах.

Переменные, сопоставленные со значением коллекции в перечислителе, также могут использоваться в выражениях и сценариях.

Контейнер «цикл по каждому элементу» может включать в себя несколько задач и контейнеров, однако в нем может использоваться только один тип перечислителя. В случае если контейнер «цикл по каждому элементу» включает в себя несколько задач, можно связывать значение коллекции в перечислителе с несколькими свойствами каждой задачи.

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

Типы перечислителей

Перечислители являются настраиваемыми. Для настройки необходимо предоставлять различные сведения в зависимости от перечислителя.

В приведенной ниже таблице перечисляются все типы сведений для разных типов перечислителей.

Перечислитель

Требования настройки

Перечислитель ADO по каждой строке

Задайте исходную переменную для объекта ADO, а также режим перечислителя.

Перечислитель по набору строк схемы ADO.NET

Задайте соединение с базой данных, а также перечисляемую схему.

Перечислитель с циклом по каждому файлу

Задайте папку и файлы для перечисления, формат имен полученных файлов, а также укажите, нужно ли просматривать вложенные папки.

Перечислитель по объекту из переменной

Задайте переменную, которая содержит объекты перечисления.

Перечислитель по каждому элементу

Задайте элементы в коллекции перечислителя по каждому элементу, включая столбцы и типы данных в них.

Перечислитель по набору узлов

Задайте источник XML-документа, а также настройте операцию XPath.

Перечислитель по объектам SMO

Задайте соединение с базой данных, а также перечисляемые объекты SMO.

Использование выражений свойств в контейнерах «цикл по каждому элементу»

Пакеты можно настроить на одновременный запуск нескольких исполняемых объектов. Такую конфигурацию следует использовать с осторожностью, если пакет содержит контейнер «цикл по каждому элементу», в котором реализованы выражения свойств.

Часто в реализации выражения свойства полезно устанавливать значение свойства ConnectionString диспетчера соединений, которое используют перечислители контейнера «цикл по каждому элементу». Выражение свойства ConnectionString устанавливается переменной, которая сопоставляется со значением коллекции перечислителя и обновляется при каждом повторении цикла.

Пакет необходимо настроить на запуск только одного исполняемого объекта в каждый момент времени. Это позволит избежать негативного влияния неопределенности временных рамок действий, присущей параллельному выполнению задач в цикле. Например, если пакет может одновременно запускать несколько задач, то контейнер «цикл по каждому элементу», который перечисляет файлы в папке, получает имена файлов и затем использует для вставки имен файлов в таблицу задачу «Выполнение SQL», может вызывать конфликт операций записи, если два экземпляра задачи «Выполнение SQL» предпримут попытку записи в одно и то же время. Дополнительные сведения см. в разделе Использование выражений свойств в пакетах.

Настройка контейнера «цикл по каждому элементу»

Свойства задаются через конструктор служб SSIS или программно.

Дополнительные сведения о свойствах, которые можно задать в конструкторе служб SSIS, см. в следующих разделах:

Дополнительные сведения об установке этих свойств в конструкторе служб SSIS см. в следующих разделах:

Программная настройка контейнера «цикл по каждому элементу»

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

Значок служб Integration Services (маленький)Будьте в курсе новых возможностей cлужб Integration Services

Чтобы загружать новейшую документацию, статьи, образцы и видеоматериалы от корпорации Майкрософт, а также лучшие решения от участников сообщества, посетите страницу служб Integration Services на сайтах MSDN или TechNet:

Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.