我们有一个结果表,其中包含5-6个源表的数据。数据以每周显示。我们决定编写一个存储过程并从SQL Server作业调用它,以便每周将数据提取到结果表中。
如果在一周的时间内在源表中更改/更新了任何数据,我们必须仅在结果表中更新这些记录。现在我们正在考虑两种方法:
创建触发器,以便在同一周内在源表中发生更改/更新时更新结果表。
使用String[]
列标识源表中的已修改记录,并在结果表中更新相同内容。
我的问题是:
感谢您的帮助。
答案 0 :(得分:0)
问题答案:
SSIS使用SQL代理作业进行调度。最终,SSIS,作业和几乎所有解决方案都必须使用T-SQL来完成所需的工作。
更改数据捕获略有不同(因此我写“差不多”的原因)。其logreader或sp_replcmds使用内部函数调用来检测(SQL Server始终记录的)更改,这意味着CDC在性能影响方面相对“轻量级”。
对所考虑的方法的评论:
使用触发器时,请仔细测试性能和逻辑。触发器 在事务范围内运行,因此它们会增加开销 影响交易表现,以及(当写不正确时)可以 导致意外回滚。我赞成CDC这种做法。
考虑添加rowversion而不是[修改日期] 列到4-5个源表中的每一个。添加4-5个二进制(8)列 (每个rowversion一个)到目标表或另一个表 与目标表具有1:1的关系。添加4-5中的每一个 源表的主键列到目标表或1:1 表。插入源表的主键值及其值 rowversion值进入目标表或1:1表。当一个 联接键值的rowversion值不同,源 table的行已被修改。当目标中没有行时 表或1:1表,已将一行插入源 表。我赞成CDC这种做法。