电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

IDENTITY列的检查指定表的当前标识值


发布日期:2021/6/11
 

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 语句中)创建的则不更正当前标识值

如果标识列上有主键或唯一键约束无效标识信息可能会导致错误信息

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 + 如果 new_reseed_value 的值小于标识列中的最大值以后引用该表时将产生 号错误信息

当前标识值可以大于表中的最大值在此情况下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)

结果集

不管是否指定任何选项(针对于包含标识列的表下例使用 pubs 数据库的 jobs 表)DBCC CHECKIDENT 返回以下结果集(值可能会有变化)

Checking identity information: current identity value current column value

DBCC execution completed If DBCC printed error messages contact your system administrator

权限

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

示例

A 如有必要重置当前标识值

下例在必要的情况下重置 jobs 表的当前标识值

USE pubs

GO

DBCC CHECKIDENT (jobs)

GO

B 报告当前标识值

下例报告 jobs 表中的当前标识值如果该标识值不正确并不对其进行更正

USE pubs

GO

DBCC CHECKIDENT (jobs NORESEED)

GO

C 强制当前标识值为

下例强制 jobs 表中的当前标识值为

USE pubs

GO

DBCC CHECKIDENT (jobs RESEED )

GO

上一篇:简单流水号生成

下一篇:jxl 实用技巧(1)