【问题标题】:SQL Server's Change Tracking / Change Data Capture with tables without primary keys?使用没有主键的表的 SQL Server 更改跟踪/更改数据捕获?
【发布时间】:2013-01-05 14:10:01
【问题描述】:

我必须监视数据库中的一个表的更改并将它们复制到另一个数据库中的某个表。由于某种原因,我无法修改原始数据库的结构,因此无法使用触发器或创建约束等。更改跟踪似乎是我需要的理想解决方案,但有些表没有主键已定义,因此我无法使用它。至于变更数据捕获,这里 - http://msdn.microsoft.com/en-us/library/bb522511.aspx 是这样写的:

.

“要启用网络跟踪,源表必须具有主键或唯一索引。”

所以基本上,似乎有类似的问题。

这种情况有什么解决方法吗?还是我遗漏了什么?

【问题讨论】:

  • 如果没有主键,就不是表……

标签: sql-server database change-tracking change-data-capture


【解决方案1】:

没有。让他们有一个主键。反正它有一个。如果这不起作用 - 抱歉,如果没有主键,您对哪些表真正改变了零概念。不管是谁设置的都应该被鞭打,然后为他写一个“我需要一份工作”的小广告,因为他在麦当劳提供汉堡 - 他显然在数据库设计方面失败了。

您现在唯一的选择是对每次同步进行完整的数据比较。玩得开心。没有解决方法。该技术需要定义主键,如果您不能使用触发器或其他任何东西,那么“选择”和代码端数据比较(会很慢)是您唯一的选择。

【讨论】:

  • 我可以补充一点,没有 PK 更改跟踪是没有意义的。必须有一些东西唯一地标识一行在它的整个生命周期。否则,如果有重复的行,或者所有列都可以一次更改的行,跟踪行为就不清楚了。
  • 是和不是。我假设这些行确实有一个逻辑 PK,只是它没有像这样设置到数据库中。甚至可以是服务器的唯一索引,而不是 PK。
猜你喜欢
  • 2019-03-08
  • 2017-09-05
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多