Как преобразовать данные с помощью Задачи SSIS Transfer SQL Server Objects? - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю пакет служб SSIS для переноса таблиц между базами данных на разных серверах.Временная метка в исходной базе данных указана в формате UTC, и я хотел бы преобразовать ее в мое местное время, используя [CallConnectedTime] AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' AS CallConnectedTime.

Как можно выполнить это преобразование в задаче «Передача объектов SQL»?Я думал об использовании задачи потока данных, но затем мне нужно создать ее для каждой таблицы, которую я переношу.

1 Ответ

0 голосов
/ 24 сентября 2018

Задача «Передача объектов SQL Server» не позволяет определять какие-либо преобразования данных.

Если вы не хотите идти по пути создания нескольких задач потока данных, вы можете создать набор записей ADO для имен таблиц после выполнения задачи переноса, а затем создать цикл по каждому элементу для перебора набора записей ADO.,Для этого вы можете использовать следующий запрос в задаче «Выполнение SQL», для которого ResultSet имеет значение Full result set:

SELECT Name 
FROM sys.tables
WHERE type_desc = 'USER_TABLE'

Сопоставить результирующий набор с типом переменной Object.Затем вы можете создать цикл по каждому элементу с помощью перечислителя ADO, навести его на переменную объекта, а затем создать другую переменную для хранения значения поля Name.

enter image description here

enter image description here

Используя переменную, которая теперь содержит поле Name, создайте еще одну задачу «Выполнение SQL» в цикле Foreach.Эта задача «Выполнение SQL» создаст и выполнит динамический оператор SQL, который ОБНОВИТ таблицу, установив CallConnectedTime.

Задача «Выполнение SQL» внутри цикла будет выглядеть примерно так:

DECLARE @query NVARCHAR(MAX)
DECLARE @Table VARCHAR(1000) = ?

SET @query = N'
UPDATE ' + @Table + N'
SET CallConnectedTime = CallConnectedTime AT TIME ZONE ''UTC'' AT TIME ZONE ''Pacific Standard Time'''

EXEC(@query)

В разделе Parameter Mapping на левой панели редактора вы добавите переменную имени таблицы в качестве имени параметра 0 следующим образом:

enter image description here

Ваш поток управления должен выглядеть примерно так, когда вы закончите с вышеуказанными шагами (игнорируйте значки ошибок).

enter image description here

...