Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Контейнер «цикл по каждому элементу» определяет повторяющийся поток управления в пакете. Реализация цикла схожа с циклической структурой Foreach в языках программирования. Организация цикла в пакете происходит с помощью перечислителя Foreach. Контейнер «цикл по каждому элементу» повторяет операции потока управления для каждого члена заданного перечислителя.
Службы SQL Server Integration Services предоставляют следующие типы перечислителя:
Перечислитель ADO по каждой строке для перечисления строк в таблицах. Например, можно получить все строки в наборе записей ADO.
Средство назначения Recordset сохраняет данные в памяти внутри набора записей, который хранится в переменной пакета с типом данных
Object. Как правило, используется контейнер «цикл по каждому элементу» с перечислителем ADO по каждой строке для обработки одной строки набора записей за раз. Переменная, указанная для перечислителя ADO по каждой строке, должна иметь тип данных Object. Дополнительные сведения о назначении Recordeset см. в разделе "Использование назначения набора записей".Перечислитель набора строк схемы ADO.NET для перечисления сведений схемы об источнике данных. Например, можно перечислить и получить список таблиц в базе данных SQL Server AdventureWorks2012.
Перечислитель с циклом по каждому файлу для перечисления файлов в папке. Перечислитель может просматривать вложенные папки. Например, можно считать все файлы с расширением LOG, находящиеся в папке Windows и всех вложенных в нее папках.
Перечислитель по объекту из переменной для перечисления объектов, содержащихся в заданной переменной. Перечисляемый объект может быть массивом, ADO.NET
DataTable, перечислителем служб Integration Services и т. д. Например, можно перечислить значения массива, в которых содержатся имена серверов.Перечислитель Foreach Item для перечисления элементов коллекций. Например, можно перечислить имена исполняемых объектов и рабочие каталоги, используемые задачей «Выполнение процесса».
Перечислитель по набору узлов для перечисления результирующего набора выражения XPath. Например, указанное выражение может перечислить и вывести список всех авторов классического периода:
/authors/author[@period='classical'].Перечислитель SMO foreach для перечисления объектов sql Server Management Objects (SMO). Например, можно перечислить и получить список представлений в базе данных SQL Server.
Перечислитель Azure BLOB для перечисления объектов BLOB в контейнере службы хранилища Azure.
Перечислитель файлов ADLS для перечисления файлов в каталоге ADLS.
На приведенной ниже диаграмме представлен контейнер «цикл по каждому элементу», в котором содержится задача «Файловая система». В цикле «по каждому элементу» используется перечислитель с циклом по каждому файлу, а задача «Файловая система» настроена для копирования файла. В заданной перечислителем папке цикл повторяется четыре раза и копирует четыре файла.
Для обновления свойства объекта в пакете, соответствующего значению коллекции перечислителя, можно использовать сочетание переменных и выражений для свойств. Вначале необходимо сопоставить значение коллекции с пользовательской переменной, а затем задать выражение для свойства, которое использует указанную переменную. Например, значение коллекции перечислителя Foreach File сопоставляется с называемой переменной MyFile, и эта переменная затем используется в выражении свойства Subject задачи *Send Mail*. Во время выполнения пакета свойству Subject присваивается имя файла на каждой итерации цикла. Дополнительные сведения см. в разделе Использование выражений свойств в пакетах.
Переменные, сопоставленные со значением коллекции в перечислителе, также могут использоваться в выражениях и скриптах.
Контейнер «цикл по каждому элементу» может включать в себя несколько задач и контейнеров, однако в нем может использоваться только один тип перечислителя. В случае если контейнер «цикл по каждому элементу» включает в себя несколько задач, можно связывать значение коллекции в перечислителе с несколькими свойствами каждой задачи.
Чтобы определить преобразование для подмножества потока управления пакета, можно задать атрибуты преобразования для контейнера «цикл по каждому элементу». Таким образом, процесс настройки преобразований происходит на уровне контейнера «цикл по каждому элементу», а не на уровне пакета. Например, в случае когда контейнер «цикл по каждому элементу» выполняет поток управления, обновляющий измерения и таблицы фактов в схеме «звезда», можно настроить преобразование таким образом, чтобы каждый раз проводилась проверка обновлений всех таблиц фактов. Дополнительные сведения см. в разделе Транзакции служб Integration Services.
Типы перечислителей
Перечислители являются настраиваемыми. Для настройки необходимо предоставлять различные сведения в зависимости от перечислителя.
В приведенной ниже таблице перечисляются все типы сведений для разных типов перечислителей.
| Энумератор | Требования к конфигурации |
|---|---|
| Перечислитель ADO по каждой строке | Задайте исходную переменную для объекта ADO, а также режим перечислителя. Переменная должна иметь тип Object. |
| Перечислитель по набору строк схемы ADO.NET | Задайте соединение с базой данных, а также перечисляемую схему. |
| Перечислитель с циклом по каждому файлу | Задайте папку и файлы для перечисления, формат имен полученных файлов, а также укажите, нужно ли просматривать вложенные папки. |
| Перечислитель по объекту из переменной | Задайте переменную, которая содержит объекты перечисления. |
| Перечислитель по каждому элементу | Задайте элементы в коллекции перечислителя по каждому элементу, включая столбцы и типы данных в них. |
| Перечислитель по набору узлов | Задайте источник XML-документа, а также настройте операцию XPath. |
| Перечислитель по объектам SMO | Задайте соединение с базой данных, а также перечисляемые объекты SMO. |
| Большой двоичный объект Azure Foreach | Укажите контейнер BLOB-объектов Azure, содержащий большие двоичные объекты для перечисления. |
| Файл ADLS по циклу Foreach | Укажите каталог ADLS, содержащий файлы для перечисления, а также некоторые фильтры. |
Выражения свойств в контейнерах циклов foreach
Пакеты можно настроить на одновременный запуск нескольких исполняемых объектов. Такую конфигурацию следует использовать с осторожностью, если пакет содержит контейнер «цикл по каждому элементу», в котором реализованы выражения свойств.
Часто в реализации выражения свойства полезно устанавливать значение свойства ConnectionString диспетчера соединений, которое используют перечислители контейнера "цикл по каждому элементу". Выражение свойства ConnectionString устанавливается переменной, которая сопоставляется со значением коллекции перечислителя и обновляется при каждом повторении цикла.
Пакет необходимо настроить на запуск только одного исполняемого объекта в каждый момент времени. Это позволит избежать негативного влияния неопределенности временных рамок действий, присущей параллельному выполнению задач в цикле. Например, если пакет может одновременно запускать несколько задач, то контейнер «цикл по каждому элементу», который перечисляет файлы в папке, получает имена файлов и затем использует для вставки имен файлов в таблицу задачу «Выполнение SQL», может вызывать конфликт операций записи, если два экземпляра задачи «Выполнение SQL» предпримут попытку записи в одно и то же время. Дополнительные сведения см. в разделе Использование выражений свойств в пакетах.
Связанные задачи
Свойства могут быть заданы с помощью конструктора SSIS или программным путем.
Дополнительные сведения о настройке этих свойств в конструкторе служб SSIS см. в одном из следующих разделов:
Дополнительные сведения о программном установлении этих свойств, щелкните по следующему разделу:
Связанные материалы
Запись блога, SSIS Для перечисления списков узлов на bidn.com.