SSIS - 使用Lookup实现SCD时锁定目标表

时间:2013-11-08 08:35:11

标签: sql-server sql-server-2008 ssis

为了覆盖SSIS数据流中的内置SCD转换,我使用了列的校验和值和查找。以下是过程。

我需要在Target_Fact_table中实现SCD类型1。

来源查询

Select key, a, b, CHECKSUM (a,b) new_value from Source_table

在查找中

Select  key, CHECKSUM (a,b) Old_value from Target_Fact_table

如果未找到匹配项,则会插入记录,如果找到匹配项,则比较New_value和Old_value,如果有任何更改,则更新记录。

首次运行没有任何问题。但是第二次当源有更多记录要更新并插入时,目标表将因为批量插入和更新而被锁定。

我尝试从 OLE DB目标任务中删除表锁,但仍然存在锁定。

我可以做些什么来避免这种锁定,或者我可以在更新转换中加入一些小延迟?

1 个答案:

答案 0 :(得分:2)

您的最佳解决方案是使用OLEDB命令来更新匹配的值,将匹配的数据插入到目标中的临时表中,然后在事实表和临时表上执行单个UPDATE JOIN语句以更新所有新的值。

这可以避免锁定,提高吞吐量,并且可以为更改提供更清晰的审计跟踪。