当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server 中调整自增字段的当前初始值

MSSQL
MySQL中SQL的单字节注入与宽字节注入
解决MySQL 5数据库连接超时问题
通过事务日志解决SQL Server常见四大故障
将SQL 2000日志迁移到SQL Server 2008
在应用环境中如何构造最优的数据库模式
数据库安全管理的三个经验分享
SQL Server应用程序的高级Sql注入
Oracle数据库与SQL Server数据库镜像对比
讲解SQL Server安装sp4补丁报错的解决方法
SQL Server 2005数据库批量更新解决办法
编写和优化SQL Server的存储过程
从数据行入手保护SQL Server数据安全
SQL Server数据体系和应用程序逻辑详解
网友分享:Oracle数据库开发技术经验浅谈
把你的数据库置于版本控制之下
SQL Server 2005实现数据库缓存依赖
SQL Server数据库管理常用SQL和T-SQL语句
初学者必读:提高SQL执行效率的几点建议
初探MS SQL CE+Codesmith
优化SQLServer数据库服务器内存配置的策略

MSSQL 中的 SQL Server 中调整自增字段的当前初始值


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 135 ::
收藏到网摘: n/a

前几天在把一个Communtiy Server 的数据库从SQL 2000升级到SQL 2005 的时候,碰到一个怪异的问题,报如下错误:
Violation of PRIMARY KEY constraint 'PK_cs_Threads'. Cannot insert duplicate key in object 'dbo.cs_Threads'.
分析进去后,竟然发现这个表的自增字段数据库中已经达到了6144,而数据库维护的这个表的初始自增值只到6109。
解决方法很简单,利用以下SQL 语句即可搞定:
DBCC CHECKIDENT ('cs_Threads')
上述语句的意思就是:如果表'cs_Threads'的当前标识值小于列中存储的最大标识值,则使用标识列中的最大值对其进行重置。
CHECKIDENT 命令可以有以下几种写法:
1、DBCC CHECKIDENT ('table_name', NORESEED)
不重置当前标识值。DBCC CHECKIDENT 返回一个报表,它指明当前标识值和应有的标识值。
类似如下的报表:
Checking identity information: current identity value '6109', current column value '6144'.
2、DBCC CHECKIDENT ('table_name') 或DBCC CHECKIDENT ('table_name', RESEED)
如果表的当前标识值小于列中存储的最大标识值,则使用标识列中的最大值对其进行重置。
上述命令执行的时候,也会报类似上面的报表。
3、DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value)
当前值设置为 new_reseed_value。
如果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。否则,下一个插入的行将使用 new_reseed_value + 1。
如果 new_reseed_value 的值小于标识列中的最大值,以后引用该表时将产生 2627 号错误信息。