自增长值
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 的时候初始值会被重置为 0 。 TRUNCATE 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 一起学习