SET IDENTITY_INSERT xyz ON的范围是什么?

时间:2011-04-26 14:36:17

标签: sql-server sql-server-2005 tsql

SET IDENTITY_INSERT xyz ON的范围是什么?

如果我在某个表的某个存储过程中使用它,如果运行不同过程的其他用户同时插入该表,会发生什么?

此外,如果不同的用户/程序尝试设置SET IDENTITY_INSERT xyz ON会发生什么 对于不同的表同时?

2 个答案:

答案 0 :(得分:13)

这是一个会话选项,一个表一次只能为任何一个表启用选项,但是多个不同的会话可以为同一个表启用它(不确定这将是一个好主意!)

当子批处理完成时(设置此选项),它看起来会自动为连接取消设置。

CREATE TABLE Tst
(C INT IDENTITY(1,1))

EXEC('SET IDENTITY_INSERT Tst ON')
INSERT INTO Tst(C) VALUES (1) /*Fails - Complains IDENTITY_INSERT is off*/

SET IDENTITY_INSERT Tst ON
EXEC('INSERT INTO Tst(C) VALUES (1)') /*Succeeds this way round*/
SET IDENTITY_INSERT Tst OFF

答案 1 :(得分:3)

我的测试(SQL 2008 R2)显示,即使表在另一个会话中有IDENTITY_INSERT ON,列上的标识规范仍会在一个会话中分发正确的值。

您应该能够在一个会话中使用特定标识列值(使用IDENTITY_INSERT ON)将数据批量插入到表中,而另一个用户(在另一个会话中)依赖于标识列来正常运行。