/* 如果插入记录的标识值大于表的当前标识值,则SQL Server自动将新插入值作为当前标识值使用*/
create table tb (id int identity(1,1),col int)
go
set identity_insert tb on
insert tb values(10,1)
set identity_insert tb off
insert tb(col) values(20) ----------标识列从最新的状态开始递增
select *
from tb
/*-----------------------*/
id col
10 1
11 20
--3. 如果插入记录的标识值小于表的当前标识值,则表的当前标识值不受新插入值的影响
--测试的表
CREATE TABLE tb(id int IDENTITY(1,1),col int)
INSERT tb VALUES(1)
INSERT tb VALUES(2)
--强制在表中插入标识值
SET IDENTITY_INSERT tb ON
INSERT tb(id,col) VALUES(1,11)
SET IDENTITY_INSERT tb OFF
INSERT tb(col) VALUES(3)
SELECT * FROM tb
/*--结果
id col
----------------- -----------
1 1
2 2
1 11
3 3
--测试资料
CREATE TABLE t1(ID int IDENTITY,A int)
INSERT t1 VALUES(1)
INSERT t1 VALUES(2)
INSERT t1 VALUES(3)
DELETE FROM t1 WHERE A=2
GO
--将ID=3的记录的ID值改为2
SET IDENTITY_INSERT t1 ON
INSERT t1(ID,A) SELECT 2,A FROM t1 WHERE ID=3
DELETE FROM t1 WHERE ID=3
SET IDENTITY_INSERT t1 OFF
SELECT * FROM t1
/*--结果
ID A
----------------- -----------
1 1
2 3
--*/
对应于
id a
1 1
3 3(因为第二条记录删除了,所以id不连续了)