前几天,当一个社区
服务器数据库从SQL 2000
升级到SQL 2005,遇到
报告以下
错误是一个奇怪的问题:
主键constraint'pk_cs_threads违规。不能在对象中插入重复密钥
经分析
发现,该表的自增字段数据库达到6144,而数据库
维护表的初始自增长率仅为6109。
解决方案很简单,可以用下面的sql语句完成:
DBCCCHECKIDENT('cs_threads)
上述声明意味着,如果table'cs_threads'is小于最大标识值存储在列的当前标识值,然后使用标识列的最大值重置。
的checkident
命令可以用下面的
方法:
1、DBCCCHECKIDENT('table_name ',noreseed)
当前标识值不reset.dbcc checkident返回报告表明当前标识值和适当的标识值。
类似于下面的报告:
核对身份信息:当前标识值'6109,当前列的值,'6144。
2、DBCCCHECKIDENT('table_name)或DBCCCHECKIDENT('table_name,补种)
如果表的当前标识值小于存储在列中的最大标识值,则使用标识列中的最大值进行重置。
执行上面的命令时,它也会报告类似于上面的报告。
3、DBCCCHECKIDENT('table_name,补种,new_reseed_value)
当前的值
设置为new_reseed_value。
如果行不插入表格后,表格的
创建,第一行插入DBCCCHECKIDENT执行后,将使用new_reseed_value身份。否则,未来将使用new_reseed_value + 1。
如果该new_reseed_value值小于在标识符列的最大值,2627号错误信息时会产生表引用。