范围是SET IDENTITY_INSERT xyz ON什么?
如果我在某个表的某个存储过程中使用此命令,那么如果另一个用户在运行不同的过程时同时将其插入该表,会发生什么情况?
此外,如果不同的用户/过程尝试同时SET IDENTITY_INSERT xyz ON为不同的表设置,会发生什么情况?
SET IDENTITY_INSERT xyz ON
这是一个会话选项,一个表一次只能在任何一个表上启用该选项,但是多个不同的会话可以在同一表上启用该选项(虽然不确定那是个好主意!)
子批处理完成时(设置了此选项),它似乎自动取消了连接设置。
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 SET IDENTITY_INSERT Tst ON EXEC('SET IDENTITY_INSERT Tst ON; INSERT INTO Tst(C) VALUES (1);') /* Also succeeds like this*/