如何在T-SQL表变量中重新设置标识列?

时间:2020-03-06 14:51:27  来源:igfitidea点击:

我有一个T-SQL表变量(不是表),它具有一个自动递增的标识列。我想清除此变量中的所有数据,并将标识列的值重置为1. 如何做到这一点?

解决方案

截断该表将转储所有数据,并重置标识种子。

否则,我们可以使用此调用在保留任何数据的同时重置身份:

DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)

如果使用表变量,则无法执行。如果它是一个表,则可以截断它或者使用DBCC CHECKIDENT。但是,如果必须使用表变量,则必须使用标识列以外的其他内容。或者,更准确地说,使用表变量中的identity列,但使用ROWNUMBER输出:

DECLARE @t table (pkint int IDENTITY(1,1), somevalue nvarchar(50))
INSERT INTO @t (somevalue) VALUES( 'one')
INSERT INTO @t (somevalue) VALUES('twp')
INSERT INTO @t (somevalue) VALUES('three')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
DELETE FROM @t
INSERT INTO @t (somevalue) VALUES('four')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t

最好使用table变量。