Как исправить ошибку «Невозможно вставить явное значение для столбца идентификаторов в таблицу, когда для IDENTITY_INSERT установлено значение OFF»?

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

В этой статье мы обсудим ошибку «Невозможно вставить явное значение для столбца идентификаторов. в таблице

, когда для IDENTITY_INSERT установлено значение OFF », как показано ниже.

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

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

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

Создайте таблицу с именем «person», используя следующий код. Созданная таблица с использованием «PRIMARY KEY IDENTITY»

 CREATE TABLE person (ID INT IDENTITY (1, 1), first_name VARCHAR (MAX), last_name VARCHAR (MAX)  )) 

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

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

 SET IDENTITY_INSERT .  .   {OFF |  ON} 

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

— это таблица со столбцом идентификаторов.

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

Ошибка 1: установите identity_insert OFF

В первом случае мы вставим данные в таблицу с «IDENTITY INSERT» , установленным на «OFF» . Таким образом, если идентификатор присутствует в операторе INSERT, вы получите ошибку «Невозможно вставить явное значение для столбца идентификаторов в таблицу ‘person’, когда для IDENTITY_INSERT установлено значение OFF».

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

 отключите identity_insert person;  вставить в значения person (ID, first_name, last_name) (3, 'Sadia', 'Majeed'), (4, 'Michel', 'Ronald') 

Результат будет таким.

Решение:

При выключении « IDENTITY INSERT OFF » « PRIMARY KEY ID » НЕ ДОЛЖЕН ПРИСУТСТВОВАТЬ в операторе вставки

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

 выключите identity_insert person;  вставить в значения person (first_name, last_name) ('Sadia', 'Majeed'), ('Michel', 'Ronald') 

Это вставит данные в таблицу без ошибок. Более того, ПЕРВИЧНЫЙ КЛЮЧ ID не требуется вводить пользователем, скорее, он автоматически добавит уникальное значение ID, как показано на рисунке ниже.

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

Во втором случае мы будем вставлять данные в таблицу с «IDENTITY INSERT» , установленным на «ON» . Таким образом, если идентификатор не указан в операторе INSERT, вы получите сообщение об ошибке «», сообщение 545, уровень 16, состояние 1, строка 17. Для столбца идентификаторов в таблице «person» необходимо указать явное значение. либо когда для IDENTITY_INSERT установлено значение ON, либо когда пользователь репликации вставляет данные в столбец идентификаторов NOT FOR REPLICATION ».

Решение:

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

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

 установите identity_insert person;  вставить в значения person (ID, first_name, last_name) (5, 'Jack', 'black'), (6, 'john', 'Wicky') 

Это вставит данные в таблицу без ошибок. Таким образом, ИДЕНТИФИКАТОР ПЕРВИЧНОГО КЛЮЧА явно должен быть вставлен пользователем. Кроме того, он не будет автоматически добавлять значение уникального идентификатора, как показано на рисунке ниже.

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

Оцените статью
techscreen.ru
Добавить комментарий