使用 SQL Server 2005 和事务复制,我可以删除订阅者的主键约束,同时保留发布者的主键约束吗?
主要我想这样做是因为我想聚集在与现有聚集约束不同的列上。我不认为我可以在不首先删除它的情况下将约束从集群转换为非集群,并且复制已经发生。
使用 SQL Server 2005 和事务复制,我可以删除订阅者的主键约束,同时保留发布者的主键约束吗?
主要我想这样做是因为我想聚集在与现有聚集约束不同的列上。我不认为我可以在不首先删除它的情况下将约束从集群转换为非集群,并且复制已经发生。
为什么不保留主键并在订阅者上创建额外的非聚集索引,否则这不能解决您的问题?如果在订阅者上索引其他列的原因是性能,那么这应该是一个解决方案。
直接,对于主键是不可能的。反之亦然:当您设置事务复制时,当您选择要复制的文章时,您可以选择不同的属性,例如“检查外键约束”。将该属性设置为 false。在 db1 中,将主键转换为外键,其中包含一些新表 tb1 作为主键。因此,最终,在您的复制数据库 db2 上,外键约束不会被复制,从而允许您做您想做的事。
The basic of replication process is to maintain identical database organisation between different servers.
Your question here can be considered as asking if a replication process can be used to break this basic replication principle.
So the answer is no, but I am still interested in the reasons that let you formulate this question. Shall I say that this "dual primary key" option was seen as a way to solve another problem? I think you should go back to this initial issue and try to find another way to solve it.
这可能适用于快照复制,但我不确定它是否适用于事务复制。允许复制表的唯一要求是存在一个主键以允许唯一标识每一行。
您可以尝试暂停复制,然后尝试删除主键约束,将其重新创建为非集群 PK,然后取消暂停复制。如果 SQL Server 不允许您放弃 PK,您会在造成任何损害之前找出答案。
另一种方法是中断复制并重新初始化它。
无论哪种方式,您都希望在维护窗口期间进行更改。
我做了自己的功课,得出的结论是你可以放弃对订阅者的限制。
我设置了一个简单的事务复制场景,删除了订阅者的主键,然后进行了一些插入、删除和更新,并验证了更改是否已复制到订阅者。
我想我应该一开始就这样做。我不知道它会那么容易:)。