使用DBCC CHECKIDENT来查看和纠正IDENTITY种子值

使用DBCC CHECKIDENT来查看和纠正IDENTITY种子值

在这个技巧中,我会介绍如何使用DBCC CHECKIDENT命令来为表检查列的IDENTITY值。DBCC CHECKIDENT检查某表当前最大的值。这个命令的语法如下:

 
  
  1. DBCC CHECKIDENT  
  2. 'table_name' [ , {NORESEED | { RESEED [ , new_reseed_value ] }}])  
  3. WITH NO_INFOMSGS ] 

表4-10详细描述了此命令的参数。

表4-10 CHECKIDENT参数

参数

描述

table_name

这个参数表示要对其IDENTITY

值进行检查的表名

NORESEED | RESEED

NORESEED代表仅仅是汇报当前最

大的标识值。RESEED指定当前的

IDENTITY应该为什么值

new_reseed_value

这个参数指定新的当前的IDENTITY

WITH NO_INFOMSGS

如果在命令中包含WITH NO_INFOMSGS

则它禁止DBCC输出信息性消息


在这个示例中,我们检查表当前的IDENTITY值:

 
  
  1. DBCC CHECKIDENT('HumanResources.CompanyAuditHistory', NORESEED) 

这个查询返回:

检查标识信息:当前标识值'2',当前列值'2'。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

第二个示例把种子值重设为一个更大的数字:

 
  
  1. DBCC CHECKIDENT ('HumanResources.CompanyAuditHistory', RESEED, 50) 

这个查询返回:

检查标识信息:当前标识值'2',当前列值'50'。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

解析

第一个示例演示了使用DBCC CHECKIDENT和NO RESEED选项检查当前的IDENTITY值。第二个示例演示了真正把IDENTITY值设置成更大的值。将来的任何插入都会从这个值开始。

为什么作这样的修改呢?带RESEED的DBCC CHECKIDENT通常用于填补主键的缺口。如果你从表中删除了一些行,这些行的IDENTITY列具有最大值,那么用过的标识值不会在下次记录插入到表中的时候重用。例如,如果上次插入的行值是22,而且你删除了那行,那么接下去插入的行值会是23。那是因为值删除之后SQL Server不会填补这个空隙。如果你希望重用键值(通常在数据库的测试阶段可以这样做,但是在正式环境下你千万别重用主键值),可以在大量行删除后使用DBCC CHECKIDENT来重用数字。

你可能感兴趣的:(使用DBCC CHECKIDENT来查看和纠正IDENTITY种子值)