Max*_*mus 1 sql-server identity alter-table sql-server-2008
我已经阅读了以下关于将列创建为常规int后无法将其更改为标识的答案。
但问题是我有一张表,该表从一开始就已迁移到新表中,该表从一开始就没有声明ID为标识,因为很久以前使用ID标识创建的旧表由于清除而缺少行历史数据。据我所知,如果我在新表上添加一个新列作为标识,它将自动顺序创建该列,并且我需要按原样保留旧表中的ID,因为已经有数据链接到这些表ID。
如何将新表中的ID列转换为标识,而不是顺序转换,而是将旧表中的ID转换为标识?
您可以尝试这种方法:
SET IDENTITY_INSERT <new table> ON。这使您可以插入自己的ID。DBCC 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。