--
1. 会话中某个表已将此属性设置为ON,当为另一个表发出了SET IDENTITY_INSERT ON 句时将出错
--
测试的表
CREATE
TABLE
ta(id
int
IDENTITY
(
1
,
1
),col
int
)
CREATE
TABLE
tb(id
int
IDENTITY
(
1
,
1
),col
int
)
GO

--
设置 IDENTITY_INSERT 属性
SET
IDENTITY_INSERT
ta
ON
SET
IDENTITY_INSERT
tb
ON
GO



/**/
/*======================================================*/


--
2. 如果插入记录的标识值大于表的当前标识值,则SQL Server自动将新插入值作为当前标识值使用
--
测试的表
CREATE
TABLE
tb(id
int
IDENTITY
(
1
,
1
),col
int
)
--
强制在表中插入标识值
SET
IDENTITY_INSERT
tb
ON
INSERT
tb(id,col)
VALUES
(
10
,
1
)
SET
IDENTITY_INSERT
tb
OFF

INSERT
tb(col)
VALUES
(
2
)
SELECT
*
FROM
tb
/**/
/*--结果
id col
----------------- -----------
10 1
11 2
--*/
GO



/**/
/*======================================================*/


--
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
--*/
本文通过三个实例详细介绍了 SQL Server 中 SET IDENTITY_INSERT 的用法:如何开启和关闭该属性;当插入的标识值大于或小于当前标识值时的行为差异。
1995

被折叠的 条评论
为什么被折叠?



