Как включить и отключить IDENTITY_INSERT с помощью SQL Server 2008?

Почему возникает ошибка при вставке, когда IDENTITY_INSERT установлено в OFF?

Как включить его правильно в SQL Server 2008? Это с помощью SQL Server Management Studio?

Я запустил этот запрос:

SET IDENTITY_INSERT Database. dbo. Baskets ON

Затем я получил сообщение на консоли, что команда успешно завершена. Однако, когда я запускаю приложение, он все равно дает мне ошибку, показанную ниже:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.

Ответ 1

Через SQL по MSDN

SET IDENTITY_INSERT sometableWithIdentity ON

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF

Полное сообщение об ошибке сообщает вам, что именно...

Невозможно вставить явное значение для столбца идентификатора в таблице "sometableWithIdentity", если для параметра IDENTITY_INSERT установлено значение OFF.

Ответ 2

У меня возникла проблема, когда она не позволяла мне вставлять ее даже после установки IDENTITY_INSERT ON.

Проблема заключалась в том, что я не указывал имена столбцов и по какой-то причине ему это не понравилось.

INSERT INTO tbl Values(vals)

Итак, в основном сделайте полные значения INSERT INTO tbl (cols) (vals)

Ответ 3

Импорт Вы должны писать столбцы в инструкции INSERT

INSERT INTO TABLE
SELECT * FROM    

Неправильно.

Insert into Table(Field1,...)
Select (Field1,...) from TABLE

Правильно

Ответ 4

Решение:

  • Установите IDENTITY_INSERT в положение ON.

  • Вставьте данные клиентов в таблицу Customer.

  • Установите IDENTITY_INSERT в положение OFF.

Прочитать полную статью здесь.

Ответ 5

Я знаю, что это более старый поток, но я просто столкнулся с этим. Если пользователь пытается запустить вставки в столбце Identity после некоторого другого сеанса Set IDENTITY_INSERT ON, он должен получить вышеуказанную ошибку.

Установка значения вставки идентификатора и последующих команд вставки DML должна выполняться одним и тем же сеансом.

Здесь @Beginner устанавливал идентификатор Insert ON отдельно, а затем запускал вставки из своего приложения. Вот почему он получил следующую ошибку:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.

Ответ 6

Вероятно, если у вас есть поле PRIMARY KEY, и вы вставляете значение, которое дублируется, или вы имеете флаг INSERT_IDENTITY, установленный на

Ответ 7

Кажется необходимым поставить SET IDENTITY_INSERT Database.dbo.Baskets ON; перед каждым отправляющим SQL INSERT пакетом.

Вы можете отправить несколько команд INSERT ... VALUES ..., начинающихся с одной строки SET IDENTITY_INSERT ... ON; в начале. Только не помещайте между собой разделитель пакетов.

Я не знаю, почему SET IDENTITY_INSERT ... ON перестает работать после блока отправки (например: .ExecuteNonQuery() в С#). Мне пришлось снова поставить SET IDENTITY_INSERT ... ON; в начале следующей строки команды SQL.

Ответ 8

Вам нужно добавить команду "go" после установки вставки идентификатора. Пример:

SET IDENTITY_INSERT sometableWithIdentity ON
go

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF
go