Как включить и выключить IDENTITY_INSERT с помощью SQL Server 2008? - PullRequest
397 голосов
/ 15 августа 2011

Почему я получаю ошибку при вставке, когда 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.

Ответы [ 7 ]

674 голосов
/ 15 августа 2011

Через 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.

52 голосов
/ 08 февраля 2013

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

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

INSERT INTO tbl Values(vals)

Таким образом, в основном выполняются полные значения INSERT INTO tbl (cols) (vals)

33 голосов
/ 22 апреля 2015

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

INSERT INTO TABLE
SELECT * FROM    

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

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

Верно

4 голосов
/ 22 апреля 2017

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

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

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

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
0 голосов
/ 08 марта 2017

Выглядит необязательно ставить базу данных SET IDENTITY_INSERT. ПСЭ. Корзины ВКЛ; перед каждой отправкой пакета SQL INSERT. / Вы можете отправить несколько команд INSERT ... VALUES .., запущенных с одной команды SET IDENTITY_INSERT ... ON; Строка в начале. Только не помещайте разделитель пакетов между / Я не знаю, почему SET IDENTITY_INSERT ... ON перестает работать, после блока отправки (например, .ExecuteNonQuery () в c #) ... Мне пришлось поставить SET IDENTITY_INSERT ... ON; снова в начале следующей строки команды SQL.

0 голосов
/ 03 апреля 2015

Вам нужно добавить команду 'go' после того, как вы установите идентификационную вставку. Пример:

SET IDENTITY_INSERT sometableWithIdentity ON
go

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

SET IDENTITY_INSERT sometableWithIdentity OFF
go
0 голосов
/ 20 ноября 2013

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

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