首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在更改源表数据时更新结果表

仅在更改源表数据时更新结果表
EN

Stack Overflow用户
提问于 2015-09-17 03:05:46
回答 1查看 1.3K关注 0票数 0

我们有一个结果表,其中包含来自5-6个源表的数据。数据每周显示一次。我们决定编写一个存储过程,并从Server作业中调用它,以便每周将数据拖到结果表中。

如果在一周内源表中的任何数据被更改/更新,我们只能在结果表中更新这些记录。现在,我们正在考虑两种方法来做到这一点:

  1. 每当在同一周内源表中发生更改/更新时,创建触发器来更新结果表。
  2. 使用[modified date]列标识源表中已修改的记录,并在结果表中更新相同的记录。

我的问题是:

  1. 在Server或SSIS中,我们有没有其他轻量级的方法来做同样的事情呢?
  2. 对于每周将数据加载到结果表中,除了Server或SSIS中的Server作业之外,我们还有其他方法吗?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-17 14:10:28

对问题的答复:

  1. 考虑一下变更数据捕获
  2. 可以按计划运行可执行文件,如sqlcmd.exe。并且有许多第三方任务/作业调度解决方案。

SSIS使用SQL代理作业进行调度。最终,SSIS、作业和几乎每个解决方案都必须使用to来完成所需的任务.

更改数据捕获略有不同(因此我写了“几乎”)。它的logreader或sp_replcmds使用内部函数调用来检测(Server总是记录的)更改,这意味着CDC在性能影响方面相对“轻量级”。

关于已考虑的办法的评论意见:

  1. 在使用触发器时仔细测试性能和逻辑。触发器在事务的范围内运行,因此它们会增加影响事务性能的开销,并且(当写入不当时)可能导致意外回滚。我倾向于CDC而不是这种方法。
  2. 考虑向4-5个源表中的每个表添加一个行版列,而不是修改日期。将4-5个二进制(8)列(每个行版本一个)添加到目标表或另一个与目标表有1:1关系的表中。将4-5源表的主键列中的每个列添加到目标表或1:1表中。将源表的主键值及其行版本值插入目标表或1:1表中。当联接键值的行版本值不同时,源表的行已被修改。当目标表或1:1表中没有一行时,一行已插入到源表中。我倾向于CDC而不是这种方法。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32621979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档