【发布时间】:2021-11-14 20:46:28
【问题描述】:
我正在尝试将标识列从一个表复制到另一个表,但出现此错误:
无法更新身份列“ID”。
我尝试了以下代码:
ALTER TABLE [dbo].[TableA]
ADD [ID] INT IDENTITY(20000,1), -- MAX(TableB.Id) < 20000
SET IDENTITY_INSERT TableA ON
UPDATE TableA
SET TableA.[ID] = TableB.[ID]
FROM TableA
INNER JOIN TableB ON TableB.ID = TableA.ID
SET IDENTITY_INSERT TableA OFF;
场景
我有两个 1:0-1 关系的表。
TableA: Code (PK)
A,
B,
C,
D
TableB: Id (PK), Code (Unique)
1, A
2, B
3, D
问题
如何
- 创建新的标识列
TableA.Id - 从
TableB.Id复制值 - 如果
TableB.Id中缺少TableA.Id,请确保它的新唯一值
【问题讨论】:
-
正如错误告诉你的那样,你不能
UPDATEIDENTITY的值。您需要CREATE一个新表,并将INSERT数据放入启用IDENTITY_INSERT的新表中。然后你可能想DROP你的旧表,并重命名你的新表。 -
外键约束有很多需要考虑的地方。见stackoverflow.com/questions/1049210/…。另外,没有涉及的行数。在这些情况下,需要通过一个侧表,替换外键约束,删除旧表并将新表(sp_)重命名为旧表。恐怕这很乏味。
标签: sql-server tsql sql-server-2012