1

现在我有一个DB,其中的PK是int IDENTITY。我最近在去年负责将这些添加到复制拓扑。除了IDENTITY字段之外,这已经得到了很好的解决。替换现有的SQL数据库表中的PK

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

还有什么我应该考虑的?


解释为何我不愿意做这样的:

这是我的理解是,当复制遇到一个标识列它留出的标识范围,说1-1000(默认值),每个订户以确保该列具有唯一的INT。你有更多的用户可能会遇到更大的问题。这导致我们不断收到的身份范围检查约束错误。

感谢

+0

难道你不能只添加一个新的GUID列用于复制?只需添加 - 不替换 - 可能会更容易(如果可行) – 2010-10-21 16:33:04

+0

要做到这一点,才能使用复制并完成。我试图解决的问题是'身份范围检查约束',这与复制如何处理标识字段有直接关系。 – 2010-10-21 16:34:53

+0

因此,在这种情况下,我会*添加*一个新的GUID字段,并使其成为PK - 但是是一个非专有PK - 并将INT IDENTITY作为表中的集群密钥。您的性能可能会受到其他方面的严重影响... – 2010-10-21 16:36:46

回答

1

如果你真的必须删除INT IDENTITY列,那么你就必须做这些步骤(或多或少):

  • 在表中创建新的GUID列并填写其值为
  • 确定引用该表的所有外键关系并记下这些关键字(例如,将它们的CREATE脚本存储在磁盘上或某物上)
  • 将新的GUID引用字段添加到所有引用表中
  • 填补基础上,INT参考场的值,你已经有
  • 删除所有FK引用到表
  • 降INT IDENTITY PK你的桌子上
  • 使新的GUID列的PK
  • 所有引用表删除旧INT参考列
  • 重新创建使用新的GUID参考列

我希望一切都外键引用该怎么办。