SQLServer数据库自增长标识列的更新修改操作方法
在日常的sql server开发中,经常会用到Identity类型的标识列作为一个表结构的自增长编号。比如文章编号、记录序号等等。自增长的标识列的引用很大程度上方便了数据库程序的开发,但是有时这个固执的字段类型也会带来一些麻烦。

一、修改标识列字段的值:(在执行insert时,将ID手动的设置成想要的值)
有时,为了实现某个功能,需要修改类型为Identity自增长类型的字段的值,但由于标识的类型所限,这种操作默认是不允许的。比如,目前数据库有10条正常记录,引时删除5条,那么如果再添加数据时,自增长的标识列会自动赋值为11,可这时如果想在插入数据时给赋值6呢,默认是不允许的。如果说想改变主键标识符的值,完全由自已控制标识字段的插入,方法是有的,如下:
SET IDENTITY_INSERT [TABLE][ON|OFF]
使用上述语句,可以方便的控制某个表的某个自增长标识列是否自动增长,也就是说是否允许你在inert一条记录时手动指定主键标识列字段的值。

如果指定为ON,则可以insert时指定主键标识字段的值,该值不自动增长。如果使用完毕,还需使用这个语句将开关关闭到默认状态OFF,不然下次insert数据时该字段还是不会自动增长,要做到有始有终嘛。只是每次插入时都要手动的设置一个主键值,示列如下:
set identity_insert question_title on //开启手动设置
insert into question_title (f_id,f_valid,f_questionTitle) values(6,5,'hello'); //手动的向数据库插入数据

二、重置标识列字段值:
当数据记录被删除一部分后,后面再添加的新数据记录,标识列数值会有很大的空闲间隔,看上去不是很爽。即使你删除表中全部记录,identity标识列的值还是会无何止的自动增加变大,而不是从头开始增长。通过下面这条语句可以重置自增长字段的值:
DBCC CHECKIDENT(TABLE,[RESEED|NORESEED],[1])
上述语句把指定表的ID值(种子值)强制重设为1。然而,如果你不想将ID重设为1,你可以用你想用的ID值(种子值)替代第三个参数。如果你想知道当前的ID值(种子值),而不想重设标识种子,这时你就要用NORESEED,而不用再去设置第三个参数。

DBCC checkident(question_title,reseed,1)

insert into question_title (f_valid,f_questionTitle) values(5,'hello');

如果将表中记录都删除后,执行上面的一句话,这时ID的自增长值已被重设,再insert插入记录到数据库时,ID就可以从设置的1开始,以后每次插入的记录还是自动增长。
执行成功后提示如下:
--检查标识信息: 当前标识值 '9',当前列值 '1'。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

说明:以上显示数据库某表中当前ID最大值为9,当前设置的ID值为1。

以上功能用得很少,我想也很少人知道吧。我上个星期帮一个朋友解决他做的一个网站的块排序问题,他问我能不能用update修改主键的值,他用的是主键自增长,我想这肯定是不可能的,如果想改的话就不要将主键设置为自增长,而是每次增加的时间手动插入。于是他给我看了一篇关于自增长的文章,我总结出设置为自增长的主键ID是不能被update的。

但我发现一点如果删除数据库里的记录,再次向数据库插入数据时,ID还是从删除的那条记录后面开始记数的,ID能不能重新开始自增长呢,或是接原来的数据后面增长,比如我删除了50~100记录,我要再插入时ID为51而不是101,经过测试,是可以实现的,所以总结了上面的。

SQLServer数据库自增长标识列的更新修改操作的更多相关文章

  1. Codesmith怎么判断sqlserver数据库字段是不是标识自增字段

    Codesmith怎么判断sqlserver数据库字段是不是标识自增字段 使用ExtendedProperty扩展信息判断 CS_isIdentity:是否为标识符,不支持Access CS_isCo ...

  2. Sql Server数据库自增长字段标识列的插入或更新修改操作办法

    写在前面的话:在日常的Sql server开发中,经常会用到Identity类型的标识列作为一个表结构的自增长编号.比如文章编号.记录编号等等.自增长的标识很大程度上方便了数据库程序的开发,但有时候这 ...

  3. 关于SQL Server数据库中的标识列

    一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列. 该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型 2.在进行插入(Insert)操作时,该列的值 ...

  4. 关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理

    SubSonic3.0插件在创建实体后,对实体进行赋值操作时,为了去除一些不必要更新的字段,减少更新的内容,会将更新内容与默认值进行比较,如果默认值与当前更新的内容相等时,则不提交更新本列,这主要是为 ...

  5. sqlserver新加一自增长的列,并且更新为行号

    --查询行号 select row_number()over(order by CHECKTIME )as RowNum,*from CHECKINOUT --更新id列为行号 update CHEC ...

  6. hibernate配置 sqlserver 数据库自动增长

    <id  name="Id" type="integer"> <column name="userid" > < ...

  7. SQLite 创建自增长标识列

    SQLite Autoincrement(自动递增) SQLite 的 AUTOINCREMENT 是一个关键字,用于表中的字段值自动递增.我们可以在创建表时在特定的列名称上使用 AUTOINCREM ...

  8. SQLServer数据库表中将指定列分组转一行

    不说明,直接看代码: --1. 创建表,添加测试数据 CREATE TABLE #test(code varchar(50), [values] varchar(10)) INSERT #test S ...

  9. MySQL中表的列结构的修改操作

    首先创建一个用于测试的表test_table: drop table if exists test_table; CREATE TABLE `test_table` ( `id` int(11) DE ...

随机推荐

  1. poj1504 Adding Reversed Numbers

    Adding Reversed Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17993 Accepted: 9 ...

  2. (5)css样式导入

    样式的组成 1.选择器:将样式与页面中的某一个或某些标签建立联系,就要使用选择器,在head标签下写一个style标签,将需控制参数的标签名写在这个style标签下,设置属性即可通过css来控制htm ...

  3. 浅谈log4j-4-不同目的地(转)

    public class DifferentAppender { private static Logger logger=Logger.getLogger(DifferentAppender.cla ...

  4. python------模块定义、导入、优化 ------->sys模块,shutil模块

    1.sys模块 import sys sys.argv #命令行参数List,第一个元素是程序本身路径sys.exit(n) #退出程序,正常退出时exit(0).sys.version #获取Pyt ...

  5. python------Json与pickle数据序列化

    一.json序列化 xml在被json取代,不同平台之间的语言转换,只能处理简单的.复杂的用pickle: pickle只能在python中用,而在Java中json也可以被识别. info = { ...

  6. 求两个数之间的质数 -----------基于for循环 算法思想

    前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...

  7. prufer数列

    涨姿势---prufer数列 一. 简介 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它 ...

  8. linux之nagios安装教程

    我的系统环境是centos7,其它系统应该也差不多,只是有几条命令可能需要换种写法 下面是我用到的命令 363 yum install -y gcc gcc-c++ httpd php php-gd ...

  9. Singer 学习十三 发现模式

    发现模式 发现模式提供了一种描述tap 支持数据流的方式,使用了json schema 做为描述数据的结构以及每个数据流的 类型,发现模式的实现依赖tap 的数据源,有些taps 将硬编码每个流的模式 ...

  10. (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80

    问题说明80端口被占用,用netstat -nlp |grep :80命令看看有什么进程占用了80端口,发现是httpd进程. 没想到安装了两个apache,我安装apache2.4的时候删除了2.2 ...