关于SET IDENTITY_INSERT !!!

来源:互联网 发布:js数组追加数据 编辑:程序博客网 时间:2024/05/19 13:29

 

/* 如果插入记录的标识值大于表的当前标识值,则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不连续了)