一尘不染

SET IDENTITY_INSERT xyz ON的范围是什么?

sql

范围是SET IDENTITY_INSERT xyz ON什么?

如果我在某个表的某个存储过程中使用此命令,那么如果另一个用户在运行不同的过程时同时将其插入该表,会发生什么情况?

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


阅读 175

收藏
2021-05-23

共1个答案

一尘不染

这是一个会话选项,一个表一次只能在任何一个表上启用该选项,但是多个不同的会话可以在同一表上启用该选项(虽然不确定那是个好主意!)

子批处理完成时(设置了此选项),它似乎自动取消了连接设置。

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*/
2021-05-23