SQL Server 修改自增列的标识值

发布时间 2023-05-04 17:36:36作者: Thenext

DBCC CHECKIDENT检查指定表中当前标识值,如有必要,则更改标识值。

1
2
3
4
5
6
DBCC CHECKIDENT  
 (  
    table_name 
        [, { NORESEED | { RESEED [, new_reseed_value ] } } ] 
WITH NO_INFOMSGS ] 

     参数:

  table_name是要对其当前标识值进行检查的表名,表中必须包含标识列。

      NORESEED指定不应更改当前标识值。

      RESEED指定应该当前标识值。

      WITH NO_INFOMSGS取消显示所有信息性信息。

      方法:

      1)DBCC CHECKIDENT(table_name,NORESEED)

           不重置当前标识值。DBCC CHECKIDENT将返回标识列的标识值和当前最大值。如果这两个值不相同,则应重置标识值,以避免值序列中的潜在错误或空白。

      2)DBCC CHECKIDENT(table_name)或DBCC CHECKIDENT(table_name,RESEED)

           如果表的当前标识值小于表示列中存储的最大标识值,则使用表示列中的最大值对其进行重置。

      3)DBCC CHECKIDENT(table_name,RESEED,new_reseed_value)

           当前标识值设置为new_reseed_value。如果任何行具有已不插入表,因为该表的创建,或如果已使用Truncate table语句中删除所有行,第一行后运行DBCC             CHECKIDENT插入使用new_reseed_value作为标识。

     当DBCC CHECKIDENT不自动重置当前标识值时的条件,并提供了重置该值的方法。

     1) 当前标识值大于表中的最大值

         执行DBCC CHECKIDENT(table_name,NORESEED)来确定在列中,当前最大值,然后指定此值new_reseed_value中DBCC                CHECKIDENT(table_name,RESEED,new_reseed_value)命令。 

         执行DBCC CHECKIDENT(table_name,RESEED,new_reseed_value)与new_reseed_value设置为非常低的值,然后运行DBCC        CHECKIDENT(table_name,RESEED)若要更正的值。

      2) 删除表中的所有行

          执行DBCC CHECKIDENT(table_name,RESEED,new_reseed_value)与new_reseed_value设置为所需的起始值。     

    权限
       DBCC CHECKIDENT 权限默认授予表所有者、sysadmin 固定服务器角色和 db_owner 固定数据库角色的成员且不可转让。