SET IDENTITY_INSERT xyz ON的范围是什么?

Rac*_*erX 14 t-sql sql-server sql-server-2005

范围是SET IDENTITY_INSERT xyz ON什么?

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

另外,如果不同的用户/程序试图同时SET IDENTITY_INSERT xyz ON 为不同的表设置会发生什么?

Mar*_*ith 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
Run Code Online (Sandbox Code Playgroud)