IDENT_CURRENT
DBCC CHECKIDENT
如果根本没有填充表,则不会返回与显示相同的值。
对于刚刚创建的表DBCC CHECKIDENT('NewTable', NORESEED)
输出当前标识为 NULL(即从未分配过):
检查身份信息:当前身份值“NULL”,当前列值“NULL”。
但是,IDENT_CURRENT('NewTable')
返回1
。根据规格这是正确的:
当 IDENT_CURRENT 值为 NULL 时(因为表从未包含行或已被截断),IDENT_CURRENT 函数返回种子值。
1
IDENT_CURRENT
当表中有单行时,返回相同的值。
要获得当前身份的正确值,您可以直接从sys.identity_columns
表中获取此信息:
SELECT last_value
FROM sys.identity_columns
WHERE object_id = OBJECT_ID('NewTable')
PS: Not sure if this approach will properly work on production DB where table is heavily updated, but for unit tests it suites well. I use this script to figure out what new seed value i should set for table when doing clean up of that table. Because for never populated table the new seed value must be 1 and 0 otherwise.