首页 > 数据库 >SQLServer数据库DBCC CHECKIDENT命令介绍

SQLServer数据库DBCC CHECKIDENT命令介绍

时间:2023-09-07 15:47:24浏览次数:54  
标签:CHECKIDENT name SQLServer CURRENT table DBCC 主键

在SQLServer输入数据时,碰到有主键ID需要维护时,可使用IDENT_CURRENT和CHECKIDENT命令来维护。   IDENT_CURRENT命令返回指定表或视图生成的最后一个标识值。用法如下:        IDENT_CURRENT('table_name')   返回类型numeric(38,0).     DBCC  CHECKIDENT命令用于检查或指定当前表/视图的标识值。用法如下:   DBCC CHECKIDENT (      table_name           [, {NORESEED | {RESEED [, new_reseed_value] } } ] ) [WITH NO_INFOSGS]     一般我们的用法如下: 1) 查看且如有必要更正当前标识值:      DBCC CHECKIDENT('table_name')   2) 查看当前标识值,即使有错也不视图更正:      DBCC CHECKIDENT('table_name', NORESEED)   3) 指定新的标识值:      DBCC CHECKIDENT('table_name', RESEED, new_reseed_value)   WITH NO_INFOSGS是关闭消息提示。   --------------------------------------------------   需要注意的问题: 当设置的new_reseed_value小于表中主键ID的值时,后续再插入过程中会出现以下错误:  a) 当主键或唯一约束存在时,会报2627错误,因为当前的主键值已在数据表中,产生冲突;  b) 当主键或唯一约束不存在时,会报重复主键错误。   解决方法:  先使用select max(id) from table_name, 查询出表中最大的ID,然后重新设置一个比其大的new_reseed_value;  如果表中数据已经删除,可以使用DBCC CHECKIDENT('table_name', NORESEED, 1)置为1,然后用DBCC CHECKIDEN('table_name')来修正。   另外,在SQL中,如果要插入ID,一般我们可以用select IDENT_CURRENT('table_name')+1 来插入比当前序列值多1的值。     参考:  https://msdn.microsoft.com/en-us/library/ms176057.aspx           https://msdn.microsoft.com/en-us/library/ms175098.aspx

标签:CHECKIDENT,name,SQLServer,CURRENT,table,DBCC,主键
From: https://www.cnblogs.com/walkersss/p/17685101.html

相关文章

  • sqlserver自动生成32位字符串
    由于数据库中有一个表的主键类型为varchar(32),而在hibernate中的类型为uuid.hex。所以想通过sqlserver中直接通过写insertinto的sql语句来自动生成主键,可采用: selectREPLACE(CAST(CAST(NEWID()ASBINARY(10))+CAST(GETDATE()ASBINARY(6))ASUNIQUEIDENTIFIER),'-','')......
  • sqlserver移植为Oracle笔记(更新,新增字段名;批量新增记录;日期查询;截取字串函数)
    下面是这两天在项目要sqlserver和oracle兼容的改造中测试出来的笔记:--sqlserver--更改主键字段名'ID'为'ID_'sp_rename  'tb_doc_cat_statistic.ID','ID_','column'--新增字段cat_codealtertabletb_doc_cat_statisticaddcat_codevarchar(100) --oracle--......
  • SQLSERVER2005表字段的修改
     在做项目中总遇到对数据库表的字段进行修改,所以先在此存放以便以后查询SQLSERVER20051、修改字段类型altertable表名ALTERCOLUMN  [字段名]  字段类型;可昨天执行下面的语句:altertableTb_module ALTERCOLUMN  [create_date]  varchar(100);报错信息:消息4......
  • oracle与sqlserver执行count(*)返回的结果兼容
    由于以前都是在sqlserver2005处理,现在客户要求oracle数据库服务器,最初的代码为:allRecordSize=(Integer)rs1.getObject(1);//IntegerallRecordSize=0;当执行的时候报:BigDecimal无法转化为Integer类型为了兼容两者修改后的代码为:Objecto=rs1.getObject(1);System.out.......
  • oracle与sqlserver插入数据动态字段值
    记录一下以备下次快速找到。。。      往tb_wf_privgrant表中插入一条记录,workflow_id字段值从tb_wf_workflow表中获取workflow_name='知识审核'的所有记录中workflow_id最大值。--oracledeclare  aNUMBER(10);  begin  select max(workflow_id)intoafromt......
  • SQL Server登录账户只能看见自己的数据库(sqlserver设置用户只能查询自己的数据库)
     SQLServer登录账户只能看见自己的数据库(sqlserver设置用户只能查询自己的数据库) 1.新建登录用户以管理员身份登陆数据库(权限最高的身份如sa),点击安全性->登录名,右键新建登录名,输入登录名和密码,取消强制实施密码策略。 2.将服务器角色设置为public  3.将public"......
  • Sqlserver中使用DBLINK
    Sqlserver中使用DBLINK一、创建链接服务器1、使用sp_addlinkedserver来增加链接EXECsp_addlinkedserver@server='192.168.2.66',--被访问的服务器别名(习惯上直接使用目标服务器IP,或取个别名如:JOY)@srvproduct='',@provider='SQLOLEDB',@datasrc='192.168.2.66'--要访问的服务......
  • sqlserver中怎么将一列数据拼接成一个字符串
     SELECTb.name+','FROM dbo.TechnologyColorajoin[dbo].[CustomColor]b ona.customcolorid=b.id WHEREProductId=345882800324677FORxmlPATH('')SELECT需要合并的字段+','FROM表名FORXMLPATH(''......
  • SqlServer2000数据库迁移"用户已存在"问题解决
    作者:fbysss关键字:sqlserver数据库用户,关联缺失背景:数据库从另外一台服务器备份之后还原,发现程序中登录数据库失败。排查:发现"安全性"->"登录"中的数据库用户与数据库没有关联,但是手工再关联,却报出错误21002:[sql-dmo]用户***已经存在的异常信息。而删除该数据库用户也无法进行,因为......
  • 制作Ubuntu64位的apache+asp+mssqlserver运行环境压缩包
    上一篇我在Ubuntu15.04下成功搭建了apache+asp+mssqlserver运行环境,但今天我又在Ubuntu20.04下重复了一次,一切顺利。但启动apache后,运行asp时页面停止了响应,查看日志发现apache的进程崩溃了。我这两个系统都是64位的,比较了apache2/bin下的问题,发现两个apache文件大小并不一样,Ubun......