重置身份种子(' DBCC CHECKIDENT ...已重置'无效)

时间:2015-02-25 14:59:27

标签: sql sql-server tsql dbcc

对于我的单元测试,我有一个自动化过程,可以逐表构建数据库的副本。我首先运行SELECT INTO并添加主键和任何索引。

我使用数据复制的一些表,对于那些没有数据的表,我希望重置身份种子。

为实现这一点,我有以下T-SQL声明:

EXEC('TRUNCATE TABLE [' + @TableName + '];')
IF EXISTS (SELECT * FROM sys.identity_columns WHERE object_id = OBJECT_ID(@TableName) AND last_value IS NOT NULL)
BEGIN
    EXEC('DBCC CHECKIDENT (' + @TableName + ', reseed, 1)')
END

查询运行时没有任何报告的问题但是当我在设计视图中检查表时, Identity Seed 值永远不会重置。

有人可以告诉我为什么没有重置身份种子,或者我还需要做什么?

更新 根据一些评论,我已将 sys.identity_columns 修改为以下内容:

IF EXISTS (SELECT * FROM sys.identity_columns WHERE object_id = OBJECT_ID(@TableName))

运行时,会返回以下消息:

  

检查身份信息:当前身份值“1”。   DBCC执行完成。如果DBCC打印了错误消息,请与系统管理员联系。

看起来很有希望。但是,如果我然后刷新表(在对象资源管理器中)并在设计视图中查看它,则Identity Seed不会更改,不是1(或0)而是135.

1 个答案:

答案 0 :(得分:0)

遇到类似的问题,即分配身份密钥(在我的情况下为更大的值)。就我而言,我发现如果在运行DBCHECKIDENT RESEED之后运行DBCC CHECKIDENT(表名),它将完全“刷新”自身为新值。否则,它将卡在较旧的值上。我不知道为什么,但是它在我的情况下有效(并且可能对其他人有用)。