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

(0)

相关推荐

  • 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 指定不应更改当前标识值. RESE

  • 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

  • sqlsever为标识列指定显式值

    sqlsever为标识列指定显式值的问题,大多是大家在两个结构完全相同的表,由其中一个表插入另一个表中指定条件的数据,报如下错误: 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'*'中的标识列指定显式值. 在网上找到了解决方案,亲自试过,可以解决. 一.问题详述如下: 系统:windows2003 数据库:2005 数据库实例:wzgl2004 和wzgl2003,这两个实例都有表kc 执行语句 insert into wzgl2004.dbo.kc select

  • sqlserver为标识列指定显式值

    sqlsever为标识列指定显式值的问题,大多是大家在两个结构完全相同的表,由其中一个表插入另一个表中指定条件的数据,报如下错误: 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'*'中的标识列指定显式值. 在网上找到了解决方案,亲自试过,可以解决. 一.问题详述如下: 系统:windows2003 数据库:2005 数据库实例:wzgl2004 和wzgl2003,这两个实例都有表kc 执行语句 insert into wzgl2004.dbo.kc select

  • SQL Server手工插入标识列的方法

    如果我们在标识列中插入值,例如: 复制代码 代码如下: insert member(id,username) values(10,'admin') 则在查询分析器里面会返回错误信息: [plain]  引用内容   服务器: 消息 544,级别 16,状态 1,行 1   当 IDENTITY_Insert 设置为 OFF 时,不能向表 'member' 中的标识列插入显式值.   有的情况我们需要手动插入标识列的值,例如删除了一些记录后,标识列并不连续,而我们又想把它补齐.我们利用一个开关可以

  • PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)

    本文实例讲述了PHP查询并删除数据库多列重复数据的方法.分享给大家供大家参考,具体如下: <?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } $db_selected = mysql_select_db("test_db", $con); if (!$db

  • sql server获得新记录标识列值的二种方法

    对新添加的记录,获得新记录的自动标识列的值,有两种方式:1.在INSERT中使用OUTPUT关键字INSERT INTO table_name(column1,column2,column3)OUTPUT INSERTED.ID --返回自动增长的标识列的值VALUES('','','') --ADO.NET调用int r = command.ExecuteScalar(); 2.使用全局变量@@IDENTITY全局变量INSERT INTO table_name(column1,column2

  • SQLite中重置自动编号列的方法

    目前流行的数据库都提供了自动编号类型,SQLite也不例外.当数据库中包含自动编号的字段时,SQLite会自动建立一个名为 sqlite_sequence 的表.这个表包含两个字段:name 和 seq .name字段记录了自动编号字段所在的表,seq字段记录了当前用到的序号(下一条记录的编号就是当前序号加1). 在开发过程中,我们经常要把表重置.也就是说把表中的记录全部清空,并把自动编号归0.在SQLite中,只需要修改 sqlite_sequence 表就可以了: 复制代码 代码如下: UP

  • DBCC SHRINKDATABASEMS SQL数据库日志压缩方法

    MS SQL数据库日志压缩方法 MS SQL性能是很不错的,但是数据库用了一段时间之后,数据库却变得很大,实际的数据量不大.一般都是数据库日志引起的!数据库日志的增长可以达到好几百M. 网上的MSSQL虚拟主机价格也贵,要想不让数据库超容,只好压缩下数据库日志,或者删除数据库日志. 下面我给大家介绍一个方法 1.打开企业管理器 2.打开要处理的数据库 3.点击菜单>工具>SQL查询分析器 4.在输入窗口里面输入: DUMP TRANSACTION [数据库名] WITH NO_LOG BACK

  • ASP.NET学习中常见错误总结归纳

    目录 前言 下拉框绑值 绑值GridView 删除数据 修改 修改赋值到另外一个页面 修改赋值到另外一个页面绑定值 换页不报错 前言 自己在学习.NET中常犯的错误(持续更新) 下拉框绑值 public void ddlist() { this.DropDownList1.DataTextField = "DeviceName"; this.DropDownList1.DataValueField = "DeviceID"; this.DropDownList1.D

随机推荐