Как включить и отключить 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