作为SSIS软件包的一部分,我有一个SQL表,其中包含登台表名称和相应的“真实”表名称。临时表的名称将根据日期而变化,但是需要执行上一步来确定Real_Table是什么。
我该如何遍历SQL中的每个变量,并将暂存表中的所有数据(两个列都相同)插入真实表中,并将标志从0更新为1,以标记完成。这是我的桌子:
Staging_Table Real_Table UpdateFlag
Customers_01012018 Customers 0
Order_01012018 Order 0
Suppliers_02022018 Suppliers 0
答案 0 :(得分:0)
您可以使用while循环将数据加载到Real表中,
DECLARE @total INT
DECLARE @start INT
DECLARE @query NVARCHAR(MAX)
DECLARE @staging_table NVARCHAR(MAX)
DECLARE @real_table NVARCHAR(MAX)
SET @start = 1
SET @total = (SELECT COUNT(*) FROM Stg_tables)
WHILE(@start <= @total)
BEGIN
SELECT TOP 1 @staging_table = Staging_Table, @real_table = Real_Table FROM Stg_tables WHERE UpdateFlag = 0
SET @query = 'INSERT INTO ' + @real_table + ' SELECT * FROM ' + @staging_table
EXEC(@query)
UPDATE Stg_tables SET UpdateFlag = 1 WHERE Staging_Table = @staging_table AND Real_Table = @real_table
SET @start = @start + 1
END
答案 1 :(得分:0)
有关如何执行此操作的概述如下。当然,请确保将正确的配置与您的环境相匹配,并在适用的情况下适当地设置元数据。
ResultSet
。在结果集上
页面上,添加一个对象变量并将结果名称设置为0以使用
即时结果。Foreach Loop
类型的Foreach ADO Enumerator
。使用“执行SQL任务”中的对象变量作为ADO对象源变量。在“变量映射”页面上,在索引1和0处添加一个字符串变量。其中一个将保留登台表名称,另一个将保留实际表名称。这些将与它们在“执行SQL任务”中选择的顺序保持一致,因此,如果您首先选择了登台表,请使用一个变量,该变量的名称将保留在索引0处。
@[User::StagingTableVariable]
变量代表该变量持有登台表名称。ValidateExternalMetadata
属性更改为false,为“数据访问模式”选择“来自变量的SQL命令”,然后选择包含使用登台表名称的SQL语句的变量。ValidateExternalMetadata
设置为false,将数据访问模式更改为使用变量中的表或视图名称(我建议使用快速加载选项),然后添加包含真实表名的变量。SQLSourceType
的值设置为变量,然后为SourceVariable
属性选择此变量。如果您在update语句的WHERE
子句中使用文本列,请确保该表达式包含单引号('
),就像典型的SQL update语句一样。示例OLE DB源变量表达式:
"SELECT ColA, ColB, ColC from YourSchema." + @[User::StagingTableVariable]
变量表达式更新命令示例:
"UPDATE YourSchema.MappingTable SET UpdateFlag = 1 where Real_Table = '" + @[User::RealTableVariable] + "'"