如何使用 SSIS 传输 SQL 服务器对象任务转换数据?
How to transform data with SSIS Transfer SQL Server Objects Task?
我正在创建一个 SSIS 包以在不同服务器上的数据库之间传输 tables。源数据库上的时间戳是 UTC,我想使用 [CallConnectedTime] AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' AS CallConnectedTime
.
将其转换为本地时间
如何在传输 SQL 对象任务中进行此转换?我考虑过使用数据流任务,但我需要为我带来的每个 table 创建一个。
传输 SQL 服务器对象任务不允许您定义任何数据转换。
如果您不想创建多个数据流任务,您可以在传输任务运行后创建一个包含 table 名称的 ADO 记录集,然后创建一个 Foreach 循环来迭代ADO 记录集。为此,您可以在执行 SQL 任务中使用以下查询,并将 ResultSet
设置为 Full result set
:
SELECT Name
FROM sys.tables
WHERE type_desc = 'USER_TABLE'
将结果集映射到对象变量类型。然后您可以使用 ADO 枚举器创建 Foreach 循环,将其指向您的 Object 变量,然后创建另一个变量来保存 Name
字段的值。
使用现在包含 Name
字段的变量,在 Foreach 循环中创建另一个执行 SQL 任务。此执行 SQL 任务将构建并执行动态 SQL 语句,该语句将通过设置 CallConnectedTime 来更新 table。
循环中的执行 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
下,您可以将 table 名称变量添加为参数名称 0,如下所示:
完成上述步骤后,您的控制流应该看起来像这样(忽略错误图标)。
我正在创建一个 SSIS 包以在不同服务器上的数据库之间传输 tables。源数据库上的时间戳是 UTC,我想使用 [CallConnectedTime] AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' AS CallConnectedTime
.
如何在传输 SQL 对象任务中进行此转换?我考虑过使用数据流任务,但我需要为我带来的每个 table 创建一个。
传输 SQL 服务器对象任务不允许您定义任何数据转换。
如果您不想创建多个数据流任务,您可以在传输任务运行后创建一个包含 table 名称的 ADO 记录集,然后创建一个 Foreach 循环来迭代ADO 记录集。为此,您可以在执行 SQL 任务中使用以下查询,并将 ResultSet
设置为 Full result set
:
SELECT Name
FROM sys.tables
WHERE type_desc = 'USER_TABLE'
将结果集映射到对象变量类型。然后您可以使用 ADO 枚举器创建 Foreach 循环,将其指向您的 Object 变量,然后创建另一个变量来保存 Name
字段的值。
使用现在包含 Name
字段的变量,在 Foreach 循环中创建另一个执行 SQL 任务。此执行 SQL 任务将构建并执行动态 SQL 语句,该语句将通过设置 CallConnectedTime 来更新 table。
循环中的执行 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
下,您可以将 table 名称变量添加为参数名称 0,如下所示:
完成上述步骤后,您的控制流应该看起来像这样(忽略错误图标)。