SET IDENTITY_INSERT xyz ON的范围是什么?

问题描述 投票:15回答:2

的范围是什么?SET IDENTITY_INSERT xyz ON?

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

另外,如果不同的用户存储过程尝试设置了 SET IDENTITY_INSERT xyz ON 同时对不同的表进行操作?

sql-server sql-server-2005 tsql
2个回答
14
投票

这是一个会话选项,一个表一次只能为任何一个表打开这个选项,但是多个不同的会话可以为同一个表打开这个选项(虽然不确定这是否是一个好主意!)。

当一个子批处理完成时(设置了这个选项),它看起来就像自动为连接取消设置。

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*/

3
投票

我的测试(SQL 2008 R2)显示,在一个会话中,列上的身份规范仍然会发出正确的值,即使表有 IDENTITY_INSERT ON 在另一个会话中插入数据。

你应该能够在一个会话中,用特定的身份列值批量插入数据到表中(用 IDENTITY_INSERT ON),而另一个用户(在另一个会话中)则依靠身份列正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.