DBCC CHECKIDENT 重置数据库标识列从某一数值开始

DBCC CHECKIDENT(N'dbo.Orders', RESEED, 0);

DBCC CHECKIDENT 语法

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。如果自从创建表以来未在表中插入任何行,或者已使用 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 执行下列任务:

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

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

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

权限

调用方必须拥有表,或者是 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. 强制将当前标识值设为新值

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

USE AdventureWorks;

GO

DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 300);

GO

时间: 2024-10-27 10:27:22

DBCC CHECKIDENT 重置数据库标识列从某一数值开始的相关文章

DBCC CHECKIDENT 重置数据库标识列从某一数值开始_MsSql

DBCC CHECKIDENT(N'dbo.Orders', RESEED, 0); DBCC CHECKIDENT 语法 DBCC CHECKIDENT ( table_name [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ] ) [ WITH NO_INFOMSGS ]参数 table_name 是要对其当前标识值进行检查的表名.指定的表必须包含标识列.表名必须符合标识符规则. NORESEED 指定不应更改当前标识值. RESE

SQL Server如何重置Identity标识列的值

一.背景 SQL Server数据库中表A中Id字段的定义是:[Id] [int] IDENTITY(1,1),随着数据的不断增长,Id值已经接近2147483647(int的取值范围为:-2 147 483 648 到 2 147 483 647)了,虽然已经对旧数据进行归档,但是这个表需要保留最近的1亿数据,有什么方法解决Id值就快爆的问题呢? 解决上面的问题有两个办法:一个是修改表结构,把Id的int数据类型修改为bigint:第二个是重置Id(Identity标识列)的值,使它重新增长.

SQL Server 重置Identity标识列的值(INT爆了)

原文 http://www.cnblogs.com/gaizai/archive/2013/04/23/3038318.html SQL Server 重置Identity标识列的值(INT爆了) 2013-04-23 17:45 by 听风吹雨, 1146 阅读, 16 评论, 收藏, 编辑 一.背景 SQL Server数据库中表A中Id字段的定义是:[Id] [int] IDENTITY(1,1),随着数据的不断增长,Id值已经接近2147483647(int的取值范围为:-2 147 4

漫谈SQL Server中的标识列(一)

server 漫谈SQL Server中的标识列(一) 一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值3.列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列. 由于以上特点,使得标识列在数据库的设计中得到广泛的使用. 二.标识列的组成创建一个标识列,通常要指定三个内容:1.类型(type)在SQL Ser

server数据库-SQL查询添加临时标识列

问题描述 SQL查询添加临时标识列 在做一个排行查询,但是数据没有标识列,所以想在查询的时候加一条临时的标识列,该怎么写sql语句呢? 解决方案 为查询结果添加一个标识列 解决方案二: MYSQLhttp://blog.csdn.net/ijong/article/details/7068265 SQL_SERVERhttp://www.2cto.com/database/201205/132643.html

SQL Server修改标识列方法 如自增列的批量化修改_MsSql

通过界面设计上是能手工操作的,无法达到我批量修改几千台服务器. 因为此了一个脚本来批量执行. 环境:redgate + mssql 2008 r2 以下代码根据自己的业务稍做修改即使用. 复制代码 代码如下: --允许对系统表进行更新 exec sp_configure 'allow updates',1 reconfigure with override GO --取消标识列标记 update syscolumns set colstat = 0 where id = object_id('t

SQL Server修改标识列方法 如自增列的批量化修改

通过界面设计上是能手工操作的,无法达到我批量修改几千台服务器. 因为此了一个脚本来批量执行. 环境:redgate + mssql 2008 r2 以下代码根据自己的业务稍做修改即使用. 复制代码 代码如下: --允许对系统表进行更新 exec sp_configure 'allow updates',1 reconfigure with override GO --取消标识列标记 update syscolumns set colstat = 0 where id = object_id('t

SQL:插入指定标识列的数据时候的小错误

异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html 后期会在博客首发更新:http://dnt.dkill.net 好久没写标识系列的代码了,刚写就报了个错 SQL: set identity_insert ShopModelBak on insert into ShopModelBak values(5,N'lll',1,1) set identity_insert ShopModelBak off 咋一看,好像没啥错啊?但

漫谈SQL Server中的标识列(二)

server 这篇文章主要总结一下标识列在复制中的处理方法 1.快照复制   在快照复制中,通常无须考虑标识列的属性. 2.事务复制   举例:   发布数据库A,订阅数据库B,出版物为T_test_A,订阅表为T_test_B   CREATE TABLE T_test_A (ID int IDENTITY(1,1),  Name varchar(50) )   CREATE TABLE T_test_B (ID int IDENTITY(1,1),  Name varchar(50) )