Sql server 如何使用SSIS传输SQL Server对象任务转换数据?
我正在创建一个SSIS包,以便在不同服务器上的数据库之间传输表。源数据库上的时间戳以UTC为单位,我希望使用时区“UTC”的Sql server 如何使用SSIS传输SQL Server对象任务转换数据?,sql-server,ssis,etl,timestamp-with-timezone,Sql Server,Ssis,Etl,Timestamp With Timezone,我正在创建一个SSIS包,以便在不同服务器上的数据库之间传输表。源数据库上的时间戳以UTC为单位,我希望使用时区“UTC”的[CallConnectedTime]和时区“太平洋标准时间”的[CallConnectedTime]作为CallConnectedTime将其转换为本地时间 如何在传输SQL对象任务中执行此转换?我曾考虑使用数据流任务,但后来我需要为我带来的每个表创建一个任务。传输SQL Server对象任务不允许您定义任何数据转换 如果不想执行创建多个数据流任务的路线,可以在传输任务运
[CallConnectedTime]和时区“太平洋标准时间”的[CallConnectedTime]作为CallConnectedTime将其转换为本地时间
如何在传输SQL对象任务中执行此转换?我曾考虑使用数据流任务,但后来我需要为我带来的每个表创建一个任务。传输SQL Server对象任务不允许您定义任何数据转换
如果不想执行创建多个数据流任务的路线,可以在传输任务运行后创建表名的ADO记录集,然后创建Foreach循环来迭代ADO记录集。为此,您可以在执行SQL任务中使用以下查询,并将ResultSet
设置为Full result set
:
SELECT Name
FROM sys.tables
WHERE type_desc = 'USER_TABLE'
将结果集映射到对象变量类型。然后,您可以使用ADO枚举器创建Foreach循环,将其指向您的对象变量,然后创建另一个变量来保存Name
字段的值
使用现在保存Name
字段的变量,在Foreach循环中创建另一个executesql任务。此执行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)
在编辑器左窗格的参数映射下,您可以将表名变量添加为参数名0,如下所示:
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)
完成上述步骤后,控制流应该是这样的(忽略错误图标)
添加了几个标签,修正了一些小的打字错误