【发布时间】:2010-02-22 08:24:28
【问题描述】:
我想要一个包含从最初到现在的所有数据的数据库版本。如果我使用 sql server 复制,我可以强制它忽略复制的删除操作吗?
【问题讨论】:
我想要一个包含从最初到现在的所有数据的数据库版本。如果我使用 sql server 复制,我可以强制它忽略复制的删除操作吗?
【问题讨论】:
我不知道有这样的功能。
如果有一个开箱即用,我会感到惊讶。如果用DELETE 和INSERT 代替UPDATE 会怎样?您的目标数据库将无法处理此类更改,因为它不会删除具有某些唯一标识符(列值)XXX 的行,然后会尝试插入具有此标识符的新行,从而导致unique key violation。
EDIT-1:如果您想要的是生产中的only-recent 数据库和用于审计的whole 数据库,那么也许您应该尝试不同的解决方案:
DELETE 逻辑(通过更改 DELETE 命令或使用 INSERT OF 触发器)以仅将行标记为已删除。然后,您创建一个视图,该视图基本上包含您的表,但仅过滤那些未删除的视图。改为针对此视图运行所有 SELECT/INSERT/UPDATE 查询。最后,在您当前的解决方案中,您确实会以某种方式将“已删除”记录标记为已删除,对吧?【讨论】:
【讨论】:
是的,你可以。如果您使用事务复制,您可以定义对您发布的表格文章的更新、删除和插入操作。
编辑以添加更多细节:
因此,在创建新的 Transactional Publication 时,在 Articles 步骤(图 1)下,您可以选择所有表和“Set Properties of All Table Articles”。 “Statement Delivery”(图 2)下的部分为 INSERT、UPDATE 和 DELETE 语句提供了“delivery formats”选项。您可以将格式设置为“不复制 DELETE 语句”,或者例如“调用 ”,它可以调用存储过程,在发布服务器上已删除的每一行上设置一个标志。
参考 Hilary Cotter 的answer on MSDN。
【讨论】: