Использование назначения «Набор записей»
Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure
Назначение «Набор записей» не сохраняет данные во внешнем источнике данных. Наоборот, назначение "Набор записей" сохраняет данные в памяти в наборе записей, который хранится в переменной пакета служб Integration Services, относящейся к типу данных Object. После сохранения данных назначением «Набор записей», как правило, используется контейнер «цикл по каждому элементу» с перечислителем ADO по каждой строке для обработки одной строки набора записей за раз. Перечислитель ADO по каждой строке сохраняет значение из каждого столбца текущей строки в отдельной переменной пакета. Затем настроенные в контейнере «цикл по каждому элементу» задания считывают эти значения из переменных и выполняют с ними ряд действий.
Назначение «Набор записей» можно использовать во многих различных случаях. Далее приводятся некоторые примеры.
Задачу "Отправка почты" и язык выражений служб Integration Services можно использовать для отправки пользовательского сообщения электронной почты для каждой строки в наборе записей.
Компонент скрипта внутри задачи потока данных, настроенный как источник, можно использовать для считывания значений столбцов в столбцы потока данных. После этого можно использовать преобразования и назначения для преобразования и сохранения строки. В приведенном примере задача потока данных выполняется один раз для каждой строки.
В следующих разделах сначала описан общий процесс использования назначения «Набор записей», а затем приводится конкретный пример использования назначения.
Общие шаги использования назначения «Набор записей»
В следующей процедуре приведены шаги, которые необходимо выполнить для сохранения данных в назначении «Набор записей», а затем используется контейнер «цикл по каждому элементу» для обработки каждой строки.
Сохранение данных в назначении «Набор записей» и обработка каждой строки при помощи контейнера «цикл по каждому элементу»
В среде SQL Server Data Tools (SSDT) создайте или откройте пакет служб Integration Services.
Создайте переменную с набором записей, сохраненным в памяти назначением «Набор записей», и задайте тип переменной Object.
Создайте дополнительные переменные соответствующих типов для хранения значений каждого столбца в наборе записей, который требуется использовать.
Добавьте и настройте диспетчер соединений, необходимый для источника данных, который планируется использовать в потоке данных.
Добавьте к пакету задачу потока данных и на вкладке "Поток данных" конструктора Integration Services настройте источники и преобразования, чтобы загрузить и преобразовать данные.
Добавьте назначение «Набор записей» к потоку данных и соедините его с преобразованиями. Для свойства VariableName назначения «Набор записей» введите имя переменной, созданной для хранения набора записей.
На вкладке "Поток управления" конструктора Integration Services добавьте контейнер "Цикл ForEach" и подключите его к задаче потока данных. Затем откройте Редактор циклов по каждому элементу , чтобы настроить следующие параметры контейнера.
На странице Коллекция выберите «Перечислитель ADO по каждой строке». Далее для параметра Переменная источника объекта ADOвыберите переменную с набором записей.
На странице Сопоставления переменных сопоставьте индекс (с отсчетом от нуля) каждого столбца, который требуется использовать, с соответствующей переменной.
При каждой итерации цикла перечислитель заполняет эти переменные значениями столбцов из текущей строки.
Внутри контейнера «цикл по каждому элементу» добавьте и настройте задачи обработки одной строки набора записей за раз путем считывания значений из переменных.
Пример использования назначения «Набор записей»
В следующем примере задача Поток данных загружает сведения о сотрудниках AdventureWorks2022 из таблицы Sales.SalesPerson в назначение набора записей. Далее контейнер «цикл по каждому элементу» считывает одну строку данных за раз и вызывает задачу «Отправка почты». Задача «Отправка почты» использует выражения для того, чтобы отправить каждому менеджеру по продажам персонифицированное сообщение о размере его или ее премии.
Создание проекта и настройка переменных
В среде SQL Server Data Tools создайте проект Integration Services.
В меню Службы SSIS выберите Переменные.
В окне Переменные создайте переменные, которые будут содержать набор записей и значения столбцов из текущей строки.
Создайте переменную с именем BonusRecordsetи типом Object.
Переменная BonusRecordset хранит набор записей.
Создайте переменную с именем EmailAddressи типом String.
Переменная EmailAddress хранит адрес электронной почты менеджера по продажам.
Создайте переменную с именем FirstNameи типом String.
Переменная FirstName хранит имя менеджера по продажам.
Создайте переменную с именем Bonusи типом Double.
Переменная Bonus хранит размер премии менеджера по продажам.
Настройка диспетчеров соединений
В области диспетчер подключений конструктора служб SSIS добавьте и настройте новый диспетчер соединений OLE DB, который подключается к образцу базы данных AdventureWorks2022.
Источник OLE DB в задаче потока данных будет использовать этот диспетчер соединений для извлечения данных.
В области «Диспетчеры соединений» добавьте и настройте новый диспетчер соединений SMTP, подключаемый к доступному SMTP-серверу.
Задача «Отправка почты» внутри контейнера «цикл по каждому элементу» будет использовать этот диспетчер соединений для отправки сообщений электронной почты.
Настройка потока данных и назначения «Набор записей»
На вкладке Поток управления конструктора Integration Services добавьте в область конструктора задачу потока данных.
На вкладке Поток данных tab, add an OLE DB source to the Поток данных task, and then open the Редактор источника «OLE DB».
На странице редактора Диспетчер соединений настройте источник со следующими параметрами.
В области Диспетчер соединений OLE DBвыберите ранее созданный диспетчер соединений OLE DB.
В списке Режим доступа к даннымвыберите Команда SQL.
В области Текст команды SQLвведите следующий запрос:
SELECT Person.Contact.EmailAddress, Person.Contact.FirstName, CONVERT(float, Sales.SalesPerson.Bonus) AS Bonus FROM Sales.SalesPerson INNER JOIN Person.Contact ON Sales.SalesPerson.SalesPersonID = Person.Contact.ContactID
Примечание.
Значение currency в столбце "Bonus" потребуется преобразовать к типу данных float , прежде чем его можно будет загрузить в переменную пакета типа Double.
На вкладке Поток данных добавьте назначение «Набор записей» и подключитесь к назначению после источника OLE DB.
Откройте Редактор назначения «Набор записей»и настройте назначение со следующими параметрами.
На вкладке Свойства компонента для свойства VariableName выберите User::BonusRecordset.
На вкладке Входные столбцы выберите все три доступных столбца.
Настройка контейнера «цикл по каждому элементу» и выполнение пакета
На вкладке Поток управления конструктора Integration Services добавьте контейнер "Цикл ForEach" и подключите его к задаче потока данных.
Откройте Редактор циклов по каждому элементуи настройте следующие параметры контейнера.
На вкладке Коллекция для параметра Перечислительвыберите Перечислитель ADO по каждой строке, а для параметра Переменная источника объекта ADOвыберите User::BonusRecordset.
На странице Сопоставления переменных сопоставьте User::EmailAddress индексу 0, User::FirstName индексу 1 и User::Bonus индексу 2.
На вкладке Поток управления внутри контейнера «цикл по каждому элементу» добавьте задачу «Отправка почты».
Откройте Редактор задачи «Отправка почты»и на странице Почта настройте следующие параметры задачи.
В области SmtpConnectionвыберите ранее настроенный диспетчер соединений SMTP.
В поле Отвведите соответствующий адрес электронной почты.
Если указать собственный адрес электронной почты, то можно будет проверить успешность выполнения пакета. Вы получите незавершенные квитанции о сообщениях, отправленных задачей Send Mail, вымышленным продавцам AdventureWorks2022.
В поле Комувведите адрес электронной почты по умолчанию.
Это значение не будет использовано, а будет заменено во время выполнения адресом электронной почты каждого менеджера по продажам.
В поле Темавведите «Ваша годовая премия».
Для параметра 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-сервер и предоставили свой собственный адрес электронной почты, вы получите незавершенные квитанции для сообщений, которые задача "Отправить почту" отправляется вымышленным продавцам AdventureWorks2022.