我正在构建一个 SQL 脚本来重置数据库。为此,我想清空几个(不是全部)表并将它们的标识值重置为 0。
对于我使用的某些表TRUNCATE TABLE
,但是当表已被外键约束引用时,这不起作用。对于我使用的那些表DBCC CHECKIDENT(TableName, RESEED, 0)
。这适用于大多数表,但不适用于所有表。如果表从未有任何数据,则当前标识值为 NULL 而不是 0:
CREATE TABLE TableName (Id int identity, Value varchar(10))
DBCC CHECKIDENT(TableName)
-- Checking identity information: current identity value 'NULL', current column value 'NULL'.
如果我DBCC CHECKIDENT(TableName, RESEED, 0)
对它们使用,它们将具有 0 作为下一个标识值。我可以改为使用 1 作为种子值,但是其中包含数据的表将从 2 开始。
是否可以在任何系统视图中找到下一个标识值?如果我可以将下一个值放入变量中,我可以使用它将下一个值设置为 0 或 1。我已经尝试过,IDENT_CURRENT('TableName')
但它表示 1 表示 NULL 和 0 作为下一个值。
拜托,我不想要任何问题,比如“为什么你需要所有这些都从 1 开始”或任何其他暗示我所要求的结果之外的结果的问题。