【发布时间】:2016-01-04 21:36:36
【问题描述】:
我已经阅读了以下关于一旦将列创建为常规 int 就不可能将列更改为标识的答案。
Adding an identity to an existing column
How to Alter a table for Identity Specification is identity SQL Server
How to alter column to identity(1,1)
但问题是我有一个表已迁移到一个新表,其中 ID 从一开始就没有声明为身份,因为很久以前使用 ID 身份创建的旧表缺少行清除历史数据。据我所知,如果我在新表上添加一个新列作为标识,它将自动按顺序创建列,我需要按原样保留旧表中的 ID,因为已经有数据链接到这些以前的ID。
如何将新表中的 ID 列转换为身份而不是顺序,而是使用旧表中的 ID?
【问题讨论】:
-
您无法更新标识列。但是,如果您为该表打开 IDENTITY_INSERT,则可以提供一个值。本质上,您必须删除所有当前行并使用所需的标识值重新插入它们。
-
从概念上讲,让新身份作为基于 X 的自增整数(其中 X = MAX([Your Old ID Column]) + 1)存在是否可以接受,然后更新它您希望将旧身份保留为其旧值的行上的身份字段?如果是这样,我将发布有关如何解决此问题的步骤作为正式答案 - 只是想确保我们首先在同一页面上。
-
@LDMJoe 您无法更新身份列。如果你知道一些更新它的方法,我会很感兴趣。
-
@SeanLange 这就是为什么我问“概念上” - 将通过填充非身份列,然后打开
IDENTITY_INSERT并使用这些值设置为 OP 想要的填充一个新表。 OP 从来没有回答,其他人已经发布了我想要的答案,并且它已被接受,所以我认为我们已经完成了这个。
标签: sql-server sql-server-2008 identity alter-table