将列更改为身份

Max*_*mus 1 sql-server identity alter-table sql-server-2008

我已经阅读了以下关于将列创建为常规int后无法将其更改为标识的答案。

向现有列添加身份

如何更改身份规范的表是身份SQL Server

如何将列更改为身份(1,1)

但问题是我有一张表,该表从一开始就已迁移到新表中,该表从一开始就没有声明ID为标识,因为很久以前使用ID标识创建的旧表由于清除而缺少行历史数据。据我所知,如果我在新表上添加一个新列作为标识,它将自动顺序创建该列,并且我需要按原样保留旧表中的ID,因为已经有数据链接到这些表ID。

如何将新表中的ID列转换为标识,而不是顺序转换,而是将旧表中的ID转换为标识?

tob*_*pls 5

您可以尝试这种方法:

  1. 使用插入具有旧ID的行SET IDENTITY_INSERT <new table> ON。这使您可以插入自己的ID。
  2. 补种的身份,将其设置为最高的ID值+1DBCC CHECKIDENT ('<new table>', RESEED, <max ID + 1>)。这将使您的身份从最高ID开始增加。

在代码中是这样的:

-- Disable auto increment
SET IDENTITY_INSERT <new table> ON
-- <INSERT STUFF HERE>
SET IDENTITY_INSERT <new table> OFF

-- Reseed Identity from max ID
DECLARE @maxval Int
SET @maxval = ISNULL(
(
    SELECT
        MAX(<identity column>) + 1
    FROM <new table>
), 0)
DBCC CHECKIDENT ('<new table>', RESEED, @maxval)
Run Code Online (Sandbox Code Playgroud)

编辑:当然,这种方法需要您的ID列为Identity。