Какова область действия SET IDENTITY_INSERT xyz ON?

Какова область действия SET IDENTITY_INSERT xyz ON?

Если я использую это в одной хранимой процедуре для определенной таблицы, что произойдет, если другой пользователь, выполняющий другую процедуру, вставляет в эту определенную таблицу одновременно?

Кроме того, что произойдет, если разные пользователи/процедуры попытаются установить SET IDENTITY_INSERT xyz ON для разных таблиц одновременно?

Ответ 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

Ответ 2

Мое тестирование (SQL 2008 R2) показывает, что спецификация идентификации в столбце по-прежнему передает правильные значения за один сеанс, даже если таблица имеет IDENTITY_INSERT ON в другом сеансе.

Вы должны иметь возможность вставлять данные в таблицу с конкретными значениями столбцов идентификатора в одном сеансе (с IDENTITY_INSERT ON), в то время как другой пользователь (в другом сеансе) зависит от нормальной работы столбца идентификации.