Какова область действия 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
), в то время как другой пользователь (в другом сеансе) зависит от нормальной работы столбца идентификации.