Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 有没有办法强制复制只复制插入和更新的数据?_Sql Server_Replication - Fatal编程技术网

Sql server 有没有办法强制复制只复制插入和更新的数据?

Sql server 有没有办法强制复制只复制插入和更新的数据?,sql-server,replication,Sql Server,Replication,我想有一个版本的我的数据库,其中包含所有的数据从第一次到现在。如果我使用sql server复制,我可以强制它忽略复制的删除操作吗?我不知道这种功能 如果有一个是现成的,我会感到惊讶。如果不是UPDATE而是DELETE和INSERT,该怎么办?您的目标数据库将无法处理此类更改,因为它不会删除具有某个唯一标识符(列值)XXX的行,然后将尝试插入具有此标识符的新行,从而导致唯一密钥冲突 编辑-1:如果您想要的是生产中的最近的数据库和整个数据库进行审核,那么您可能应该尝试不同的解决方案: 逻辑删除和

我想有一个版本的我的数据库,其中包含所有的数据从第一次到现在。如果我使用sql server复制,我可以强制它忽略复制的删除操作吗?

我不知道这种功能

如果有一个是现成的,我会感到惊讶。如果不是
UPDATE
而是
DELETE
INSERT
,该怎么办?您的目标数据库将无法处理此类更改,因为它不会删除具有某个唯一标识符(列值)
XXX
的行,然后将尝试插入具有此标识符的新行,从而导致
唯一密钥冲突

编辑-1:如果您想要的是生产中的
最近的
数据库和整个
数据库进行审核,那么您可能应该尝试不同的解决方案:

  • 逻辑删除和视图:更改
    删除
    逻辑(通过更改Delete命令或使用INSERT OF trigger)仅将行标记为已删除。然后创建一个视图,该视图基本上包装了表,但只过滤未删除的表。改为此视图运行所有选择/插入/更新查询。最后,在您当前的解决方案中,您会以某种方式将“已删除”记录标记为已删除,对吗
  • 审核表:将历史记录也保存在主数据库中,但保存在审核(影子)表中。同样,您可以使用AFTER触发器几乎无干扰地执行此操作

  • 这不是常见的情况,看看这是否有帮助:

    我有一个包含400个表的db。我不能把触发器放在每个表上。我不认为表的数量限制了触发器的使用。使用小脚本,您可以自动创建这些触发器。但这更多的是你的设计问题。一般来说,逻辑删除有一个问题:您可能有从“活动”表/行到逻辑删除表/行的FK约束,这是不应该发生的。但是,您可以详细说明一下您试图通过这种复制实现什么吗?如果您不喜欢PROD数据库上的触发器,为什么您不在复制副本上才有触发器?因此,您可以不执行任何操作或将其标记为已删除,而不是删除。