替换现有SQL数据库表中的PK

时间:2010-10-21 16:25:51

标签: sql sql-server-2005 primary-key replication identity-column

现在我有一个数据库,PK是int IDENTITY。我最近在去年的任务是将这些添加到复制拓扑中。除了IDENTITY字段之外,这已经很好了。

我想探索使用uniqeidentifier(GUID)更改或替换它们的选项 插入新的PK列是否可行? 我会更好地将其增加到big int吗?

我还应该考虑其他什么?


详细说明我想做的事情:

据我所知,当复制遇到IDENTITY列时,它为每个订户留出一个标识范围,比如1-1000(默认值),以确保该列的唯一INT。订阅者越多,问题就越大。这导致我们不断得到的身份范围检查约束错误。

由于

1 个答案:

答案 0 :(得分:1)

如果您真的必须删除INT IDENTITY列,那么您必须执行以下步骤(或多或少):

  • 在表格中创建新的GUID列,并使用值
  • 填充它
  • 标识引用该表并记录这些表的所有外键关系(例如,将其CREATE脚本存储在磁盘或其他内容上)
  • 向所有引用表添加新的GUID引用字段
  • 根据您已有的INT参考字段填写这些值
  • 将所有FK引用删除到您的表
  • 删除表上的INT IDENTITY PK
  • 将新的GUID列设为PK
  • 从所有引用表中删除旧的INT引用列
  • 使用新的GUID参考列重新创建所有外键引用

我希望应该这样做。