从int到GUID作为主键移动

Ale*_*yev 7 sql sql-server database-design

我使用几个带有整数主键的引用表.现在我想将更改为GUID,使所有引用保持不变.最简单的方法是什么?

谢谢!

加成

我一般都了解这个过程,所以我需要更详细的建议,例如,如何填写新的GUID列.使用默认值newid()是正确的,但对于现有的行是什么?

And*_*nes 11

  • 在主表中为guid值创建一个新列.使用uniqueidentifier数据类型,使其不为null,并使用newid()默认值,以便填充所有现有行.
  • 在子表中创建新的uniqueidentifier列.
  • 运行update语句以使用exisitng int关系构建公会关系以引用实体.
  • 删除原始的int列.

此外,在数据/索引页面中留出一些空间(指定fillfactor <100),因为guids不像int identity列那样是顺序的.这意味着插入可以位于数据范围内的任何位置,如果页面已满100%,则会导致页面拆分.


Gle*_*ven 6

首先:亲爱的上帝为什么?!?!?

其次,您必须首先将 GUID 列添加到所有表中,然后根据 int 值填充它们。完成后,您可以将 GUID 设置为主键/外键,然后删除 int 列。

要更新值,您可以执行以下操作

  1. 在主键表中设置新的 GUID
  2. 运行这个:

.

UPDATE foreignTable f
SET f.guidCol = p.guidCol
FROM primaryTable p
WHERE p.intCol = f.intCol
Run Code Online (Sandbox Code Playgroud)