【发布时间】:2018-08-22 22:22:06
【问题描述】:
我有以下表格:
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));
这是一个简化的例子,实际上表格中还有其他与问题无关的列。 我需要将两个表的主键列更改为 int 类型并自动递增但也将旧 Id 值保留为 GUID 列 我的问题是: 进行这些更改的最佳方法是什么?想到两种方法 - 第一种是删除 B.Id 上的所有索引,向 B 表添加一个新的标识列,对 A.Id 执行相同操作,然后向 A 添加一个新的空列(BId_New INT),更新 A然后使 BId_New 不为空。另一种方法是将表的数据保存到复制的表中,截断 A 和 B 表,然后更改它们的模式并将复制表中的值插入到实际表中。哪种方式更好,在什么情况下?
【问题讨论】:
-
我认为您可以重命名它们以免于复制。无论哪种方式似乎都很好。
标签: tsql sql-server-2012 primary-key alter-table changetype