DBCC大全集之(适用版本MS SQLServer 2008 R2)---DBCC CHECKIDENT在 SQL Server 2008 R2 中检查指定表的当前标识值,如有必要,则更改标识值
2013-12-26 09:43
621 查看
在 SQL Server 2008 R2 中检查指定表的当前标识值,如有必要,则更改标识值。还可以使用 DBCC CHECKIDENT 为标识列手动设置新的当前标识值。
Transact-SQL
语法约定
语法
参数
table_name
是要对其当前标识值进行检查的表名。指定的表必须包含标识列。表名必须符合标识符规则。
NORESEED
指定不应更改当前标识值。
RESEED
指定应该更改当前标识值。
new_reseed_value
用作标识列的当前值的新值。
WITH NO_INFOMSGS
取消显示所有信息性消息。
注释
对当前标识值所做的具体更正取决于参数规范。
下表列出了 DBCC CHECKIDENT 不自动重置当前标识值时的条件,并提供了重置该值的方法。
种子值是针对装入表的第一行插入到标识列的值。所有后续行都包含当前标识值和增量值,其中当前标识值是为当前表或视图生成的最新标识值。有关详细信息,请参阅创建和修改标识符列。
不能使用 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 固定数据库角色的成员。
示例
以下示例根据需要重置 AdventureWorks2008R2 数据库中 AddressType 表的当前标识值。
Transact-SQL
以下示例报告 AdventureWorks2008R2 数据库的 AddressType 表中的当前标识值,但如果该标识值不正确,不会进行更正。
Transact-SQL
以下示例强制将 AddressType 表中的 AddressTypeID 列中的当前标识值设置为 10。因为该表有现有行,因此下一个插入行将使用
11 作为值,即当前标识值加上 1(为该列定义的当前增加值)。
Transact-SQL
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 命令 | 标识更正或所做的更正 |
---|---|
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, RESEED,new_reseed_value) 命令中的 new_reseed_value。 或者 在将 new_reseed_value 设置为非常低的值的情况下执行 DBCC CHECKIDENT (table_name, RESEED,new_reseed_value),然后运行 DBCC CHECKIDENT (table_name, RESEED) 以更正该值。 |
删除表中的所有行。 | 在将 new_reseed_value 设置为所需开始值的情况下执行 DBCC CHECKIDENT (table_name, RESEED,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", RESEED, 10); GO
相关文章推荐
- DBCC大全集之(适用版本MS SQLServer 2008 R2)---DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKCONSTRAINTS检查当前数据库中指定表上的指定约束或所有约束的完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKCONSTRAINTS检查当前数据库中指定表上的指定约束或所有约束的完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKCONSTRAINTS检查当前数据库中指定表上的指定约束或所有约束的完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHRINKFILE收缩当前数据库的指定数据或日志文件的大小
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKALLOC检查指定数据库的磁盘空间分配结构的一致性。
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKCATALOG检查指定数据库内的目录一致性。数据库必须联机。
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKDB通过执行下列操作检查指定数据库中所有对象的逻辑和物理完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)---DBCC CHECKFILEGROUP检查当前数据库中指定文件组中的所有表和索引视图的分配和结构完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKTABLE检查组成表或索引视图的所有页和结构的完整性
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC OUTPUTBUFFER以十六进制和 ASCII 格式返回指定 session_id 的当前输出缓冲区
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHRINKDATABASE收缩指定数据库中的数据文件和日志文件的大小
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC DBREINDEX对指定数据库中的表重新生成一个或多个索引
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHOWCONTIG显示指定的表或视图的数据和索引的碎片信息
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC dllname (FREE)从内存中上载指定的扩展存储过程 DLL
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHOW_STATISTICSDBCC SHOW_STATISTICS 显示表或索引视图的当前查询优化统计信息
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC HELP返回指定的 DBCC 命令的语法信息