自增长字段复位

DBCC CHECKIDENT (Transact-SQL)

检查指定表的当前标识值,如有必要,则更改标识值。还可以使用 DBCC CHECKIDENT 为标识列手动设置新的种子值。

 Transact-SQL 语法约定

 语法

DBCC CHECKIDENT 

        'table_name'
        [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

 参数 
'table_name' 
是要对其当前标识值进行检查的表名。指定的表必须包含标识列。表名必须符合标识符规则。

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

RESEED 
指定应该更改当前标识值。

new_reseed_value 
在标识列中重新赋值时要使用的新种子值。

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

 结果集 
无论是否为包含标识列的表指定了任何选项,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 命令  标识更正或所做的更正  
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。如果自创建表后没有在表中插入任何行,则在运行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。否则,插入的下一行将使用 new_reseed_value + 当前增量值。

如果该表不为空,那么将标识值设置为小于标识列中的最大值的数字时,将会出现下列情况之一:

如果标识列中存在 PRIMARY KEY 或 UNIQUE 约束,则随后在表中执行插入操作时将生成错误消息 2627,原因是生成的标识值将与现有值冲突。

如果不存在 PRIMARY KEY 或 UNIQUE 约束,则随后的插入操作将产生重复的标识值。



 

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

条件  重置方法  
当前标识值大于表中的最大值。
 执行 DBCC CHECKIDENT ('table_name', NORESEED) 以确定列中的当前最大值,然后在 DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) 命令中将该值指定为 new_reseed_value。

或者

执行 DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value),并将 new_reseed_value 设置为很小的值,然后运行 DBCC CHECKIDENT ('table_name', RESEED) 以更正该值。

 
删除表中的所有行。
 执行 DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value),并将 new_reseed_value 设置为所需的起始值。
 

 权限 
调用方必须是表所有者,或是 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员。

 示例 
A. 根据需要重置当前标识值
以下示例根据需要重置 AdventureWorks 数据库中 Employee 表的当前标识值。

 复制代码
USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO

B. 报告当前标识值
以下示例报告 AdventureWorks 数据库的 Employee 表中的当前标识值,但如果该标识值不正确,不会进行更正。

 复制代码
USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO

C. 将当前标识值强制设置为 30
以下示例将 AdventureWorks 数据库的 Employee 表中的当前标识值强制设置为值 30。

 复制代码
USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30);
GO

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值