Программирование

Как исправить ошибку ‘Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF’?

Содержание:

При создании базы данных SQL Server столбец первичного ключа часто устанавливается на автоинкремент. Для этого для столбца первичного ключа устанавливается ограничение IDENTITY. Начальное местоположение и шаг инкремента передаются в столбец IDENTITY в качестве параметров. Тогда всякий раз, когда добавляется новая запись, и вставка идентичности установлена в OFF, значение столбца IDENTITY увеличивается на заранее определенный шаг обычно число. Более того, свойство IDENTITY INSERT установлено в ON только для одной таблицы в одной сессии.

В этой статье мы рассмотрим ошибку «Cannot insert explicit value for identity column in table <имя таблицы> когда IDENTITY_INSERT установлен в OFF» как показано ниже.

Выключение «IDENTITY INSERT OFF» и вставка данных без «PRIMARY KEY ID» в оператор вставки

Ошибка возникает, если пользователь установил «identity_insert” на “OFF”. Затем пытается вставить данные в столбец первичного ключа таблицы в явном виде. Это можно объяснить на примере ниже.

База данных и создание таблицы:

Сначала создайте базу данных с именем “appuals».

Создание базы данных с именем “appuals».

Создайте таблицу с именем «person», используя следующий код. Построенная таблица с использованием «ПЕРВИЧНЫЙ КЛЮЧ IDENTITY»

CREATE TABLE person
(
ID INT IDENTITY (1, 1),
first_name VARCHAR(MAX) ,
last_name VARCHAR(MAX)
)
Создание таблицы с именем «person»

Синтаксис для установки “identity_insert off | on”:

Сайт «set identity_insert off | on» поможет нам решить эту ошибку. Правильный синтаксис этого утверждения выглядит следующим образом.

SET IDENTITY_INSERT <имя базы данных> . <имя схемы>. <имя таблицы> { OFF | ON }

Если первый аргумент <имя базы данных> имя базы данных, в которой находится таблица. Второй аргумент <имя схемы> показывает схему, к которой принадлежит эта таблица, чье значение identity должно быть установлено на ON или OFF. Третий аргумент <имя таблицы> таблица с колонкой идентификации.

Существует принципиально два различных способа безошибочной вставки данных в таблицу. Решение этой ошибки рассматривается ниже.

Ошибка 1: Установить identity_insert OFF

В первом случае мы будем вставлять данные в таблицу с параметром «ВСТАВКА ИДЕНТИФИКАТОРА» установить в «OFF». Таким образом, если ID присутствует в операторе INSERT, вы получите ошибку “Cannot insert explicit value for identity column in table ‘person’ when IDENTITY_INSERT is set to OFF».

Выполните следующий код на вкладке запроса.

 set identity_insert person off;
insert into person(ID,first_name,last_name)
values(3,'Sadia','Majeed'),
(4,'Michel','Ronald')

Вывод будет выглядеть следующим образом.

Ошибка возникает из-за отключения «IDENTITY INSERT OFF», и вставки данных с «PRIMARY KEY ID» в оператор вставки

Решение:

При включении «IDENTITY INSERT OFF», the «ПЕРВИЧНЫЙ КЛЮЧ ID» НЕ ДОЛЖНО БЫТЬ ПРЕДСТАВЛЕНО в операторе вставки

Теперь выполните следующий код на вкладке запроса

 set identity_insert person off;
insert into person(first_name,last_name)
values('Sadia','Majeed'),
('Michel','Ronald')
Отключение «IDENTITY INSERT OFF» и вставка данных без «PRIMARY KEY ID» в оператор insert

Это позволит вставить данные в таблицу без ошибки. Более того, PRIMARY KEY ID не нужно вставлять пользователю, он автоматически добавит уникальное значение ID, как показано на рисунке ниже.

Ошибка 2: Установить identity_insert ON

Во втором случае, мы вставим данные в таблицу с параметром «IDENTITY INSERT» установить в «ON». Таким образом, если ID не присутствует в операторе INSERT, вы получите ошибку ” Msg 545, Level 16, State 1, Line 17. Явное значение должно быть указано для столбца identity в таблице ‘person’ либо когда IDENTITY_INSERT установлен в ON, либо когда пользователь репликации вставляет в столбец identity NOT FOR REPLICATION”.

Ошибка возникает из-за вставки данных в таблицу с параметром «IDENTITY INSERT», установленным на «ON». То есть PRIMARY KEY ID явно требуется для вставки пользователем

Решение:

При повороте «IDENTITY INSERT ON» «PRIMARY KEY ID» должен присутствовать в операторе вставки.

Выполните следующий код на вкладке запросов

 set identity_insert person on;
insert into person(ID,first_name,last_name)
values(5,'Jack','black'),
values(6,'john','Wicky')
Вставка данных в таблицу с «IDENTITY INSERT», установленным на «ON» и с первичным ключом id в операторе вставки.

Это позволит вставить данные в таблицу без ошибки. Таким образом PRIMARY KEY ID явно требуется, чтобы пользователь вставил его. Также не будет автоматически добавлено уникальное значение ID, как показано на рисунке ниже.

Если вы «УСТАНОВИТЕ IDENTITY INSERT ON», она останется включенной в течение всего сеанса. Таким образом, вы можете добавлять столько записей, сколько хотите, как только это будет установлено. Это также относится только к сессии, в которой он включен. Поэтому, если вы открыли другую вкладку с запросом, вам нужно перевернуть ее НА снова для этого окна запроса.

Добавить комментарий