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

前几天在把一个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 号错误信息。

时间: 2024-10-26 20:44:32

SQL Server 中调整自增字段的当前初始值_MsSql的相关文章

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

前几天在把一个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

SQL Server中数据行批量插入脚本的存储实现_MsSql

无意中看到朋友写的一篇文章"将表里的数据批量生成INSERT语句的存储过程的实现".我仔细看文中的两个存储代码,自我感觉两个都不太满意,都是生成的单行模式的插入,数据行稍微大些性能会受影响的.所在公司本来就存在第二个版本的类似实现,但是是基于多行模式的,还是需要手工添加UNAION ALL来满足多行模式的插入.看到这篇博文和基于公司数据行批量脚本的存储的缺点,这次改写和增强该存储的功能.    本存储运行于SQL Server 2005或以上版本,T-SQL代码如下: IF OBJEC

在SQL Server中使用命令调用SSIS包的具体方法_MsSql

具体操作步骤如下: 1.首先,当然是要在Business Intelligence中设计好包,并调试通过. 2.然后,有两种方式可以在SQL Server中使用命令运行SSIS包 第一种是直接执行ssis包文件,命令如: exec xp_cmdshell 'dtexec /f "c:\test.dtsx"' 第二种是将包文件发布或者导入到Integration Services服务中,然后再执行. 发布包是在Business Intelligence中生成发布文件,并发布到Integr

SQL Server中避免触发镜像SUSPEND的N种方法_MsSql

背景:我们在使用数据库的过程中,很多时候要追求性能,特别在处理大批量数据的时候更希望快速处理.那么对SQL SERVER而言,数据库实现大批量插入的优化方案,这里特别介绍通过大容量插入的一种方式. 基本原理: 简单恢复模式按最小方式记录大多数大容量操作,对于完整恢复模式下的数据库,大容量导入期间执行的所有行插入操作被完整地记录到事务日志中.如果数据导入量较大,会导致迅速填满事务日志.对于大容量导入操作,按最小方式记录比完整记录更有效,并减少了大容量导入操作填满日志空间的可能性,所以性能会得到极大

SQL Server中自动获取编号字段

  ①像Access中的自动编号字段 右键你的表-->设计表-->找到你的id字段(类int型)-->标识-->是-->标识种子(初始值)-->标识递增量-->OK ②用IDENTITY (SEED,INCREMENT)参数 seed -启始值 increment -增量 CREATE TABLE 表名( 你的ID IDENTITY (1, 1) NOT NULL ,你的其他字段... ) CREATE TABLE 表名( 你的字段ID AUTOINCREMENT

SQL Server中通过扩展存储过程实现数据库的远程备份与恢复_MsSql

本文通过实例解析了 SQL Server 数据库扩展存储过程,实现远程备份与恢复的方法和步骤实例说明: 环境:win2k+sqlserver 2K+查询分析器 SQL SERVER服务实例名称:mainserver 需要备份的数据库名称: msdb 本地机器名称(Client端):david 本地用户:zf 密码:123 本地域名:domain 本地提供备份需求的文件夹:e: est 第一步: 建立共享文件夹 在程序代码中调用(或者CMD窗口) net share test=e: est 或者用

SQL Server中实现二进制与字符类型之间的数据转换_MsSql

在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容.解析的时候,往往是一个字节(Byte)占用8个位(bit),高位4bit 表示一个十六进制数据,低位4bit 表示一个十六进制数据. 问题描述:在SQL Server 数据库中,如何实现二进制数据与字符串数据之间的直接转换? 一定会有人立马反问我:为什么不在程序中使用 C# 或者 JAVA 或者 C++ 来处理这个业务呢?我的回答是:这个我知道,也已经实现了.但在一些特殊的应用环境和业

sql server中判断表或临时表是否存在的方法_MsSql

1.判断数据表是否存在 方法一: use yourdb; go if object_id(N'tablename',N'U') is not null print '存在' else print '不存在' 例如: use fireweb; go if object_id(N'TEMP_TBL',N'U') is not null print '存在' else print '不存在' 方法二: USE [实例名] GO IF EXISTS (SELECT * FROM dbo.SysObjec

SQL Server中text或ntext 字段内容替换方法

  update 表名 set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值') 1.update ntext: (1)varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace. update 表名 set text类型字段名=replace(convert(varchar(8000),text类型字段名),