码迷,mamicode.com
首页 > 数据库 > 详细

07 SQL Server中的Identity列(Identity Column in SQL Server)

时间:2016-01-16 11:52:11      阅读:474      评论:0      收藏:0      [点我收藏+]

标签:

如果创建新表的时候将一个列设置为Identity,那么在插入数据的时候可以不显示的指定值,SQL Server会自动填充该列的值。

Create Table tblPerson1
(
    PersonId Int Identity(1,1) Primary key Not Null,
    Name Nvarchar(50) null
)

此时,可用下面的代码向表中插入数据。虽然tblPerson表有两列,但在插入的时候只用指定Name的值即可,因为PersonId的属性为Identity,在插入数据时SQL Server会自动计算该值(起始值为1,增量为1)。

Insert Into tblPerson1
Values
(John)

但是,值得注意的是,如果我们显示的为tblPerson的PersonId指定一个值是不允许的,如下面的代码将会报错:

Insert Into tblPerson1
Values
(2,Marttin)

Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table ‘tblPerson1‘ can only be specified when a column list is used and IDENTITY_INSERT is ON.

意思是,如果要显示的为Indentity列设置值,必须在插入语句中指定列名以及将IDENTITY_INSERT设置为ON。

根据报错信息,现在我们首先使用下面语句将IDENTITY_INSERT设置为ON状态:

Set IDENTITY_INSERT tblPerson1 ON

然后在插入语句中显示的列出列名:

Insert Into tblPerson1(PersonId,Name)
Values
(2,Marttin)

这样PersonId为2,Name为“Marttin”的记录就成功插入了。

但是这样又有一个问题,当我们不想显示提供PersonId列的值又会报错了:

Insert Into tblPerson1
Values
(Marttin)

Msg 545, Level 16, State 1, Line 1
Explicit value must be specified for identity column in table ‘tblPerson1‘ either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column.

此时我们要将IDENTITY_INSERT设置为OFF:

Set IDENTITY_INSERT tblPerson1 OFF

这样就可以回到最开始的状态了。

 

现在有这样一种场景,我们将表中的数据清空,此时再向表中插入数据,PersonId的值会是多少呢?如下面的代码:

Delete From tblPerson1

Insert Into tblPerson1
Values
(Bob)

若查询数据库,我们得知tblPerson表中的值是:

PersonId  Name
4     Bob

如果我们想让PersonId重新开始计数,也就是新插入的值的PersonId为1,那么可以使用DBCC CHECKIDENT命令:

DBCC CHECKIDENT(tblPerson1,RESEED,0)

Checking identity information: current identity value ‘4‘, current column value ‘0‘.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

上面语句的意思是将identity 的值从4变成0,如果此时插入新的记录,那么PersonId的值将会是1

INSERT INTO tblPerson1
VALUES
(SARA)

查询结果:

PersonId  Name
1     SARA

07 SQL Server中的Identity列(Identity Column in SQL Server)

标签:

原文地址:http://www.cnblogs.com/kuillldan/p/5135183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!