T-SQL:更改主键类型时什么时候需要删除和重新创建表?

T-SQL: When is dropping and recreating tables needed when changing the primary key type?

我有以下 tables:

CREATE TABLE B( Id  [uniqueidentifier] PRIMARY KEY NOT NULL,    [Name] varchar(100) NULL;
CREATE TABLE A (Id  [uniqueidentifier] PRIMARY KEY NOT NULL,    BId [uniqueidentifier] NOT NULL CONSTRAINT FK_A_B   FOREIGN KEY(BId)    REFERENCES dbo.B(Id));

这是一个简化的例子,实际上table中还有其他列与问题无关。 我需要将 tables 的主键列都更改为 int 类型并自动递增 BUT 以将旧的 Id 值保留为 GUID 列 我的问题是: 进行这些更改的最佳方法是什么?我想到了两种方法 - 第一种是删除 B.Id 上的所有索引,向 B table 添加一个新的标识列,对 A.Id 执行相同的操作,然后向 A.Id 添加一个新的空列A (BId_New INT),更新 A 然后使 BId_New 不为空。另一种方法是将 tables 的数据保存到复制的 tables,截断 A 和 B tables,然后更改它们的模式并插入复制的 [=20] 中的值=]s 到实际的。在什么情况下哪种方式更好?

  1. 在 B table 上创建新的身份密钥,您可以将其定义为 Not Null 开始,因为身份属性将填充它。
  2. 移除 table A
  3. 上的 FK 约束
  4. 删除 table B 上的 PK 约束。如果您希望新的 PK 也成为聚集索引,则可能还需要删除聚集索引。我不确定删除 PK 约束是否也会删除聚簇索引。
  5. 在身份属性上创建新的 PK 约束
  6. 在 A table 中创建新的 int 属性。请勿使用身份。
  7. 通过在 GUID 上加入 A 和 B 并检索新的 B 主键来更新新的 int 属性
  8. 更改 table A 中的新列,将其更改为 Not Null
  9. 在新的 int key
  10. 上创建 link table A 到 table B 的 FK 约束