对于我的单元测试,我有一个自动化过程,可以逐表构建数据库的副本。我首先运行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.
答案 0 :(得分:0)
遇到类似的问题,即分配身份密钥(在我的情况下为更大的值)。就我而言,我发现如果在运行DBCHECKIDENT RESEED之后运行DBCC CHECKIDENT(表名),它将完全“刷新”自身为新值。否则,它将卡在较旧的值上。我不知道为什么,但是它在我的情况下有效(并且可能对其他人有用)。