我遇到了不同观点的问题。
目前的情景:
我使用SSIS包每15分钟从服务器A到服务器B获取数据。为10个不同的表处理了10个包,并为此创建了10个临时表。在DataFlow任务中,它从服务器A中选择ID较大的最后导入ID,并将它们转储到Staging表上。(每个表都有自己的停滞表)。在DataFlow任务之后,我使用MERGE语句从Staging合并记录表到目标表,其中ID为“无匹配”。
问题:
这会照顾所有插入的新记录,但是如果SSIS作业选择了一条记录并且在源处更新,我将无法再次获取它并且无法获取更新的数据。
问题:
我可以截断目标中的表并重新插入第一次运行的完整数据。
编辑:
来源有一栏' LAST_UPDATE_DATE'我可以在我的查询中使用。
答案 0 :(得分:1)
如果我正确理解您的陈述,听起来您似乎非常接近您的解决方案。如果您当前有一个包含插入的merge语句(其中source与目标不匹配),您应该能够轻松地包含(其中source匹配目标)的update语句。
示例:
MERGE target_table as destination_table_alias
USING (
SELECT <column_name(s)>
FROM source_table
) AS source_alias
ON
[source_table].[table_identifier] = [destination_table_alias].[table_identifier]
WHEN MATCHED THEN UPDATE
SET [destination_table_alias.column_name1] = mySource.column_name1,
[destination_table_alias.column_name2] = mySource.column_name2
WHEN NOT MATCHED THEN
INSERT
([column_name1],[column_name2])
VALUES([source_alias].[column_name1],mySource.[column_name2])
所以,对你的观点:
希望这有帮助