Какова область действия SET IDENTITY_INSERT xyz ON? - PullRequest
14 голосов
/ 26 апреля 2011

Каков охват SET IDENTITY_INSERT xyz ON?

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

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

Ответы [ 2 ]

13 голосов
/ 26 апреля 2011

Это опция сеанса, для таблицы может быть включена опция только для одной таблицы за раз, но для нескольких разных сессий она может быть включена для одной и той же таблицы (хотя я не уверен, что это будет хорошей идеей!)

Когда дочерняя партия завершает работу (которая устанавливает эту опцию), похоже, что она автоматически отключается для соединения.

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
3 голосов
/ 06 декабря 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...