加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

DBCC大全集之(适用版本MS SQLServer 2008 R2)---DBCC CHECKIDE

发布时间:2020-12-12 13:37:49 所属栏目:MsSql教程 来源:网络整理
导读:在 SQL Server 2008 R2 中检查指定表的当前标识值,如有必要,则更改标识值。还可以使用 DBCC CHECKIDENT 为标识列手动设置新的当前标识值。 ? Transact-SQL 语法约定 语法 DBCC CHECKIDENT ( ????table_name????????[,{?NORESEED | { RESEED [,new_reseed_v

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 (table_name,NORESEED) 可以确定列中的当前最大值,然后指定该值作为 DBCC CHECKIDENT (table_name,new_reseed_value) 命令中的?new_reseed_value

或者

  • 在将?new_reseed_value?设置为非常低的值的情况下执行 DBCC CHECKIDENT (table_name,new_reseed_value),然后运行 DBCC CHECKIDENT (table_name,RESEED) 以更正该值。

删除表中的所有行。

在将?new_reseed_value?设置为所需开始值的情况下执行 DBCC CHECKIDENT (table_name,new_reseed_value)。

更改种子值

种子值是针对装入表的第一行插入到标识列的值。所有后续行都包含当前标识值和增量值,其中当前标识值是为当前表或视图生成的最新标识值。有关详细信息,请参阅创建和修改标识符列。

不能使用 DBCC CHECKIDENT 执行下列任务:

  • 更改创建表或视图时为标识列指定的原始种子值。

  • 重设表或视图中的现有行的种子值。

若要更改原始种子值并重设所有现有行的种子值,必须删除并重新创建标识列,然后为标识列指定新的种子值。当表包含数据时,还会将标识号添加到具有指定种子值和增量值的现有行中。无法保证行的更新顺序。

结果集

无论是否为包含标识列的表指定了任何选项,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.

权限

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

示例

A. 根据需要重置当前标识值

以下示例根据需要重置 AdventureWorks2008R2 数据库中?AddressType?表的当前标识值。

Transact-SQL
USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType");
GO


B. 报告当前标识值

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

Transact-SQL
USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType",NORESEED);
GO


C. 强制将当前标识值设为新值

以下示例强制将?AddressType?表中的?AddressTypeID?列中的当前标识值设置为 10。因为该表有现有行,因此下一个插入行将使用 11 作为值,即当前标识值加上 1(为该列定义的当前增加值)。

Transact-SQL
USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType",10);
GO

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

在 SQL Server 2008 R2 中检查指定表的当前标识值,如有必要,则更改标识值。还可以使用 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 命令

标识更正或所做的更正

条件

重置方法

    推荐文章
      热点阅读