ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Identity的相关用法

Identity的相关用法

原创 Linux操作系统 作者:journeysu 时间:2013-04-28 11:11:21 0 删除 编辑
一、相关语法

1、IDENTITY [ (seed , increment) ]

Seed:加载到表中的第一个行所使用的值

Increment:与前一个加载行的标识的增量值

如果以上两个都没有指定,那么默认是(1,1)

2、SET IDENTITY_INSERT允许将显式值插入表的标识列中。

语法:SET IDENTITY_INSERT [database.[ owner.]] {table } { ON |OFF }

database:指定的表所驻留的数据库名称。

Owner:表所有者的名称。

Table:含有标识列的表名。

3、DBCC CHECKIDENT 语法
DBCC CHECKIDENT ( table_name [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ] ) [ WITH NO_INFOMSGS ]

table_name :是要对其当前标识值进行检查的表名。指定的表必须包含标识列。表名必须符合标识符规则。
    NORESEED
:指定不应更改当前标识值。
    RESEED
:指定应该更改当前标识值。
    new_reseed_value
:用作标识列的当前值的新值。
    WITH NO_INFOMSGS
:取消显示所有信息性消息。

二、实验测试

1、创建表格

Create table student(id int not null identity

Name char(20) not null);

2、插入数据时,报544错误

INSERT INTO STUDENT(ID,NAME) VALUES(1,'HAPPYSU')

消息 544,级别 16,状态 1,第 1 行
    当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'student' 中的标识列插入显式值。

解决方法一:(允许标识列插入)

SET IDENTITY_INSERT TEST_SQL.DBO.STUDENT ON;

具体语法查看上面介绍。再次插入数据验证OK.

解决方法二:(指定列插入)

Insert into student(name) values(‘journeysu’);

插入数据OK

3、在identity列删除数据再插入时,造成数据不连续性。

比如我删除了id=5的数据,如果没有在SET IDENTITY_INSERT TEST_SQL.DBO.STUDENT ON及没有指定id这一列插入再次插入一条数据的时候,数据库是会自动标识id=6的。

如果在这个时候需要强制id从5开始的话,那么重置种子的值,可以设置如下:

dbcc checkident(student,reseed,4)

语法详见上文。

三、总结

1、 Identity在插入数据时,先看看有没有指定列名插入、identity_insert有没有打开(一个数据库只能打开一个)。

2、 identity是标识列不是序号列,如果想给表指定一个连续不断的序号列的时候,请慎重选择identity,因为identity是唯一标识列,在删除数据的时候会造成序号不连续,需要你重置种子数才能避免数据序号的不连续性。
 
         原创文章,转载请标注!谢谢

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28477322/viewspace-759470/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-04-28

  • 博文量
    1
  • 访问量
    2232