SQL 服务器事务复制 - 如何复制除特定列的值之外的所有项目

SQL Server transactional replication - how replicate all articles except the values of a specific colum

我需要复制table的所有文章,同时防止一列数据被复制。取消选中文章会删除整个列,从而更改其架构。但是,我想维护该列而不更新其数据。

您想要订阅者上的整个架构,但您想要复制对某些列的更改,对吗?这是可以做到的,但需要您做一些工作。我可以看到两个选项:

  1. 在订阅者上创建一个触发器,触发器内部将包含忽略对上述列的更改的逻辑。此选项的缺点是触发器会影响性能。我会避免这个选项。
  2. 利用custom stored procedures复制更改。这样做的目的是,您修改提供的复制存储过程,以排除您希望在订阅者上排除的列。当复制将更改应用于订阅者时,它将忽略您指定的更改。
  3. 利用replicating the execution of a stored proc。这样做的目的是,如果您将存储过程标记为要复制,则存储过程对任何已发布的 table 所做的任何更改都不会被复制,只有 proc 调用及其参数会发送给订阅者并执行。订阅者上的存储过程将需要修改以排除更新提到的列。此外,table 文章需要将其 ins/upd/del 属性设置为不执行任何操作。为确保在发布方对 table 所做的个别更改不会复制到订阅方,您可以在文章中将 ins/upd/del 操作设置为空。

在所有情况下,很可能需要您使用发布的@post_snapshot_script,这将在 reinit/snapshot.

之后在订阅者上创建对象

IMO,我会选择选项 #2。