SQL Set IDENTITY字段使用变量

Moo*_*ght 6 t-sql dynamic-sql identity-column sql-server-2008

全部,我想IDENTITY根据从另一个表获得的当前最大值开始字段的编号.所以我尝试了类似下面的内容

DECLARE @CurrentES INT;
SET @CurrentES = (SELECT MaxES 
                  FROM [NDB]..[TmpMaxES]) + 1;
ALTER TABLE BA 
ADD ES INT IDENTITY(@CurrentES, 1);
Run Code Online (Sandbox Code Playgroud)

但是这不会接受变量作为IDENTITY中的种子值.我怎样才能实现我的目标?

谢谢你的时间.

Joo*_*oon 8

做这个和其他非变量允许的任务,你可以使用EXEC函数,如下:

DECLARE @CurrentES INT;
SET @CurrentES = (SELECT MaxES 
                  FROM [NDB]..[TmpMaxES]) + 1;

DECLARE @Statement VARCHAR(200)

SET @Statement = 'ALTER TABLE BA 
ADD ES INT IDENTITY(' + CAST(@CurrentES AS VARCHAR) + ', 1);'

EXEC (@Statement)
Run Code Online (Sandbox Code Playgroud)


fre*_*ler 6

您可以使用dbcc checkidentSQL Server 的功能...

DECLARE @MAXID INT
SELECT @MAXID = MAX(ID_FIELD) FROM OLDTABLE
dbcc checkident(NEWTABLE, reseed, @MAXID)
Run Code Online (Sandbox Code Playgroud)

需要注意的一点是,第3个参数(在本例中为@MAXID变量)中的值表示当前标识值 - 换句话说,表示在表上生成的最后一个标识值.

因此,例如,如果您想要自动创建的下一个100,则将第3个参数设置为99.