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