Как использовать назначение «Набор записей»
Назначение «Набор записей» не сохраняет данные во внешнем источнике данных. Наоборот, назначение «Набор записей» сохраняет данные в памяти в наборе записей, который хранится в переменной пакета служб Integration Services, относящейся к типу данных Object. После сохранения данных назначением «Набор записей», как правило, используется контейнер «цикл по каждому элементу» с перечислителем ADO по каждой строке для обработки одной строки набора записей за раз. Перечислитель ADO по каждой строке сохраняет значение из каждого столбца текущей строки в отдельной переменной пакета. Затем настроенные в контейнере «цикл по каждому элементу» задания считывают эти значения из переменных и выполняют с ними ряд действий.
Назначение «Набор записей» можно использовать во многих различных случаях. Приведем некоторые примеры.
Задачу «Отправка почты» и язык выражений служб Integration Services можно использовать для отправки пользовательского сообщения электронной почты для каждой строки в наборе записей.
Компонент скрипта внутри задачи потока данных, настроенный как источник, можно использовать для считывания значений столбцов в столбцы потока данных. После этого можно использовать преобразования и назначения для преобразования и сохранения строки. В приведенном примере задача потока данных выполняется один раз для каждой строки.
В следующих разделах сначала описан общий процесс использования назначения «Набор записей», а затем приводится конкретный пример использования назначения.
Общие шаги использования назначения «Набор записей»
В следующей процедуре приведены шаги, которые необходимо выполнить для сохранения данных в назначении «Набор записей», а затем используется контейнер «цикл по каждому элементу» для обработки каждой строки.
Сохранение данных в назначении «Набор записей» и обработка каждой строки при помощи контейнера «цикл по каждому элементу»
В среде Business Intelligence Development Studio создайте или откройте пакет служб Integration Services.
Создайте переменную с набором записей, сохраненным в памяти назначением «Набор записей», и задайте тип переменной Object.
Создайте дополнительные переменные соответствующих типов для хранения значений каждого столбца в наборе записей, который требуется использовать.
Добавьте и настройте диспетчер соединений, необходимый для источника данных, который планируется использовать в потоке данных.
Добавьте к пакету задачу потока данных и на вкладке «Поток данных» конструктора служб SSIS настройте источники и преобразования для загрузки и преобразования данных.
Добавьте назначение «Набор записей» к потоку данных и соедините его с преобразованиями. Для свойства VariableName назначения «Набор записей» введите имя переменной, созданной для хранения набора записей.
На вкладке «Поток управления» конструктора служб SSIS добавьте контейнер «цикл по каждому элементу» и подключите его к задаче потока данных. Затем откройте Редактор циклов по каждому элементу, чтобы настроить следующие параметры контейнера.
На странице Коллекция выберите «Перечислитель ADO по каждой строке». Далее для параметра Переменная источника объекта ADO выберите переменную с набором записей.
На странице Сопоставления переменных сопоставьте индекс (с отсчетом от нуля) каждого столбца, который требуется использовать, с соответствующей переменной.
При каждой итерации цикла перечислитель заполняет эти переменные значениями столбцов из текущей строки.
Внутри контейнера «цикл по каждому элементу» добавьте и настройте задачи обработки одной строки набора записей за раз путем считывания значений из переменных.
Пример использования назначения «Набор записей»
В следующем примере задача потока данных выполняет загрузку сведений о сотрудниках База данных AdventureWorks2008R2 из таблицы Sales.SalesPerson в назначение «Набор записей». Далее контейнер «цикл по каждому элементу» считывает одну строку данных за раз и вызывает задачу «Отправка почты». Задача «Отправка почты» использует выражения для того, чтобы отправить каждому менеджеру по продажам персонифицированное сообщение о размере его или ее премии.
Создание проекта и настройка переменных
В среде BI Development Studio создайте новый проект служб Integration Services.
В меню Службы SSIS выберите Переменные.
В окне Переменные создайте переменные, которые будут содержать набор записей и значения столбцов из текущей строки.
Создайте переменную с именем BonusRecordset и типом Object.
Переменная BonusRecordset хранит набор записей.
Создайте переменную с именем EmailAddress и типом String.
Переменная EmailAddress хранит адрес электронной почты менеджера по продажам.
Создайте переменную с именем FirstName и типом String.
Переменная FirstName хранит имя менеджера по продажам.
Создайте переменную с именем Bonus и типом Double.
Переменная Bonus хранит размер премии менеджера по продажам.
Настройка диспетчеров соединений
В области «Диспетчеры соединений» конструктора служб SSIS добавьте и настройте новый диспетчер соединений OLE DB, подключаемый к образцу базы данных База данных AdventureWorks2008R2.
Источник OLE DB в задаче потока данных будет использовать этот диспетчер соединений для извлечения данных.
В области «Диспетчеры соединений» добавьте и настройте новый диспетчер соединений SMTP, подключаемый к доступному SMTP-серверу.
Задача «Отправка почты» внутри контейнера «цикл по каждому элементу» будет использовать этот диспетчер соединений для отправки сообщений электронной почты.
Настройка потока данных и назначения «Набор записей»
На вкладке Поток управления конструктора служб SSIS добавьте в область конструктора задачу потока данных.
На вкладке Поток данных добавьте источник OLE DB к задаче потока данных, а затем откройте Редактор источника «OLE DB».
На странице редактора Диспетчер соединений настройте источник со следующими параметрами.
В области Диспетчер соединений OLE DB выберите ранее созданный диспетчер соединений OLE DB.
В списке Режим доступа к данным выберите Команда SQL.
В области Текст команды SQL введите следующий запрос:
SELECT Sales.vSalesPerson.EmailAddress, Sales.vSalesPerson.FirstName, CONVERT(float, Sales.SalesPerson.Bonus) AS Bonus FROM Sales.SalesPerson INNER JOIN Sales.vSalesPerson ON Sales.SalesPerson.BusinessEntityID = Sales.vSalesPerson.BusinessEntityID;
Примечание Значение currency в столбце «Bonus» потребуется преобразовать к типу данных float, прежде чем его можно будет загрузить в переменную пакета типа Double.
На вкладке Поток данных добавьте назначение «Набор записей» и подключитесь к назначению после источника OLE DB.
Откройте Редактор назначения «Набор записей» и настройте назначение со следующими параметрами.
На вкладке Свойства компонента для свойства VariableName выберите User::BonusRecordset.
На вкладке Входные столбцы выберите все три доступных столбца.
Настройка контейнера «цикл по каждому элементу» и выполнение пакета
На вкладке Поток управления конструктора служб SSIS добавьте контейнер «цикл по каждому элементу» и подключите его к задаче потока данных.
Откройте Редактор циклов по каждому элементу и настройте следующие параметры контейнера.
На вкладке Коллекция для параметра Перечислитель выберите Перечислитель ADO по каждой строке, а для параметра Переменная источника объекта ADO выберите User::BonusRecordset.
На странице Сопоставления переменных сопоставьте User::EmailAddress индексу 0, User::FirstName индексу 1 и User::Bonus индексу 2.
На вкладке Поток управления внутри контейнера «цикл по каждому элементу» добавьте задачу «Отправка почты».
Откройте Редактор задачи «Отправка почты» и на странице Почта настройте следующие параметры задачи.
В области SmtpConnection выберите ранее настроенный диспетчер соединений SMTP.
В поле От введите соответствующий адрес электронной почты.
Если указать собственный адрес электронной почты, то можно будет проверить успешность выполнения пакета. Будут получены подтверждения о невозможности доставить сообщения, отправленные задачей «Отправка почты» несуществующим менеджерам по продажам База данных AdventureWorks2008R2.
В поле Кому введите адрес электронной почты по умолчанию.
Это значение не будет использовано, а будет заменено во время выполнения адресом электронной почты каждого менеджера по продажам.
В поле Тема введите «Ваша годовая премия».
Для параметра MessageSourceType выберите значение Прямой ввод.
На странице Выражения в Редакторе задачи «Отправка почты» нажмите кнопку с многоточием (…), чтобы открыть Редактор выражений свойств.
В Редакторе выражений свойств введите следующие данные.
В поле ToLine добавьте следующее выражение:
@[User::EmailAddress]
Для свойства MessageSource добавьте следующее выражение:
"Dear " + @[User::FirstName] + ": The amount of your bonus for this year is $" + (DT_WSTR, 12) @[User::Bonus] + ". Thank you!"
Запустите пакет.
Если был указан допустимый SMTP-сервер и задан собственный адрес электронной почты, будут получены подтверждения о невозможности отправки сообщений задачей «Отправка почты» вымышленным менеджерам по продажам База данных AdventureWorks2008R2.