自增长值

1、自增长的插入数据

对于自增长列有时候需要插入数据,如果是新手(我就是),然后没有接触过自增长的相关知识的话,可能就会出错。像我上次往一张空表插入数据的时候就出现如下的错误:

消息 8101,级别 16,状态 1,第 1 行
An explicit value for the identity column in table '.dbo.RMAMaster' can only be specified when a column list is used and IDENTITY_INSERT is ON.

这个是有提示的,很明显,已经解释说明了需要把 IDENTITY_INSERT这个设置为ON才可以。

如下所以未:

set identity_insert t on  
insert into t (id, name) values(1, 'sqlstudy')  
set identity_insert t off  

需要说明一下任何时候,一个会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,则对另一个表发出 SET IDENTITY_INSERT ON 语句时,SQL Server 将返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON,并报告已将其属性设置为 ON 的表。所以我们在写的时候也要注意这个成对的出现。

2、设置种子值

     1)我们可以在自定义的时候直接对其进行设置 如 :

CREATE TABLE T (
ID INT IDENTITY(1,1) PRIMARY KEY,
NAME VARCHAR(20)
)

2)对数据之中已经存在的值进行指定值:

假设T表中已经存在100条记录,也就是T表中的ID最多列是 100,由于某种需求,我们想要把初始值改掉,空余出一部分,现在开始之后的数据都由1000开始进行增长。

DBCC CHECKIDENT ('t', RESEED,1000)
注: tb: 是你要设置初始值的表名 , RESEED: 固定参数无需更改, 10000: 是你要设置的初始值
会出现下面的提示:
检查标识信息: 当前标识值 '100',当前列值 '1000'DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

执行完上述语句,可以通过一下的语句查询一下:

INSERT INTO T
SELECT '测试初始值'

SELECT MAX(ID) FROM T

从查询结果可以看到我们的最大值为1001,也就是说101 -- 1000为预留值。

注意: 对于自增的表进行 truncate 的时候初始值会被重置为 0TRUNCATE TABLE T 
INSERT INTO T
SELECT '测试'
GO 100 
SELECT * FROM T

我们能看到这个结果的ID还是从 1 到100 而对于 DELETE FROM 的结果则会 从最大的ID开始递加。

DELETE FROM T 
INSERT INTO T
SELECT '测试初始值1'
SELECT * FROM T 

这个结果则会是101

 也可以参考:http://www.cnblogs.com/zerocc/archive/2012/12/06/2805337.html 一起学习

 

 

posted @ 2011-12-19 15:58  _cc  阅读(351)  评论(0编辑  收藏  举报