使用DBCC CHECKIDENT可以重新设置在使用中的表的标识列的起始值; 如在删除表中的所有记录,需要让标识列从1开始时可以在查询分析器中执行:DBCC CHECKIDENT(TableName,RESEED,0);该语句的使用方法如下:DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( 'table_name' [,{ NORESEED | { RESEED [,new_reseed_value] } } ] ) 参数 'table_name' 是要对其当前标识值进行检查的表名。表名必须符合标识符规则。有关更多信息,请参见使用标识符。指定的表必须包含标识列。 NORESEED 指定不应更正当前标识值。 RESEED 指定应该更正当前标识值。 new_reseed_value 是在标识列中重新赋值时要使用的值。 备注 如有必要,DBCC CHECKIDENT 会更正列的当前标识值。然而,如果标识列是使用 NOT FOR REPLICATION 子句(在 CREATE TABLE 或 ALTER TABLE 语句中)创建的,则不更正当前标识值。 如果标识列上有主键或唯一键约束,无效标识信息可能会导致错误信息 2627。 对当前标识值所做的具体更正取决于参数规范。 DBCC CHECKIDENT 语句所做的标识更正DBCC CHECKIDENT ('table_name', NORESEED)不重置当前标识值。DBCC CHECKIDENT 将返回标识列的当前标识值和当前最大值。如果这两个值不相同,则应重置标识值,以避免值序列中的潜在错误或空白。DBCC CHECKIDENT ('table_name') 或 DBCC CHECKIDENT ('table_name', RESEED)如果表的当前标识值小于标识列中存储的最大标识值,则使用标识列中的最大值对其进行重置。DBCC CHECKIDENT ('table_name', RESEED,new_reseed_value) 将当前标识值设置为new_reseed_value。如果表创建后未插入任何行,或者使用 TRUNCATE TABLE 语句删除了所有行,则您运行 DBCC CHECKIDENT 之后插入的第一行使用new_reseed_value作为标识。否则,插入的下一行将使用new_reseed_value+ 当前增量值。 如果该表不为空,那么将标识值设置为小于标识列中的最大值的数字时,将会出现下列情况之一: 如果标识列中存在 PRIMARY KEY 或 UNIQUE 约束,则随后在表中执行插入操作时将生成错误消息 2627,原因是生成的标识值将与现有值冲突。 如果不存在 PRIMARY KEY 或 UNIQUE 约束,则随后的插入操作将产生重复的标识值。 异常 下面列出了 DBCC CHECKIDENT 不自动重置当前标识值时的条件,并提供了重置该值的方法。 当前标识值可以大于表中的最大值。在此情况下,DBCC CHECKIDENT 并不自动重置当前标识值。若要在当前标识值大于列中的最大值时对当前标识值进行重置,请使用两种方法中的任意一种: 执行 DBCC CHECKIDENT ('table_name', NORESEED) 以确定列中的当前最大值,然后使用 DBCC CHECKIDENT ('table_name', RESEED,new_reseed_value) 语句将该值指定为new_reseed_value。 将new_reseed_value置为很小值来执行 DBCC CHECKIDENT ('table_name', RESEED,new_reseed_value),然后运行 DBCC CHECKIDENT ('table_name', RESEED)。 当删除表中的所有行时。在此情况下,DBCC CHECKIDENT 并不自动重置当前标识值。若要在删除表中所有行时对当前标识值进行重置,请使用下面这种方法: 执行 DBCC CHECKIDENT (table_name,RESEED,new_reseed_value),并将new_reseed_value设置为所需的起始值。 结果集 无论是否为包含标识列的表指定了任何选项,DBCC CHECKIDENT 都返回以下信息(返回值可能有所不同): Checking identity information: current identity value '290', current column value '290'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.权限 DBCC CHECKIDENT 权限默认授予表所有者、sysadmin固定服务器角色和db_owner固定数据库角色的成员且不可转让。 示例A. 根据需要重置当前标识值 以下示例根据需要重置 AdventureWorks 数据库中 Employee 表的当前标识值。 USE AdventureWorks; GO DBCC CHECKIDENT ("HumanResources.Employee"); GOB. 报告当前标识值 以下示例报告 AdventureWorks 数据库的 Employee 表中的当前标识值,但如果该标识值不正确,不会进行更正。 USE AdventureWorks; GO DBCC CHECKIDENT ("HumanResources.Employee", NORESEED); GOC. 将当前标识值强制设置为 30 以下示例将 Employee 表中 EmployeeID 列中的当前标识值强制设置为值 30。由于该表具有现有行,因此插入的下一行将使用 31 作为值,即,当前标识值加 1(1 是为该列定义的当前增量值)。 USE AdventureWorks; GO DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30); GO