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

У меня есть следующая ошибка, когда я выполняю следующий script. Что такое ошибка и как ее можно решить?

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

Ошибка:

Сервер: Msg 544, уровень 16, состояние 1, строка 1

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

Ответ 1

Вы вставляете значения для OperationId, который является столбцом идентификатора .

Вы можете включить идентификационную вставку в таблице так, чтобы вы могли указать свои собственные значения идентификации.

SET IDENTITY_INSERT Table1 ON

INSERT INTO Table1
/*Note the column list is REQUIRED here, not optional*/
            (OperationID,
             OpDescription,
             FilterID)
VALUES      (20,
             'Hierachy Update',
             1)

SET IDENTITY_INSERT Table1 OFF 

Ответ 2

не присваивать значение OperationID, потому что он будет автоматически сгенерирован. попробуйте следующее:

Insert table(OpDescription,FilterID) values ('Hierachy Update',1)

Ответ 3

Будьте очень осторожны при установке параметра IDENTITY_INSERT в положение ON. Это плохая практика, если база данных не находится в режиме обслуживания и не установлена ​​на одного пользователя. Это влияет не только на вашу вставку, но и на тех, кто пытается получить доступ к таблице.

Почему вы пытаетесь поместить значение в поле идентификации?

Ответ 4

Проще говоря, если вы получаете эту ошибку на сервере SQL, запустите этот query-

SET IDENTITY_INSERT tableName ON

это работает только для одной таблицы базы данных, например, если имя таблицы "ученик", запрос выглядит следующим образом: SET IDENTITY_INSERT student ON

Если вы получаете эту ошибку в своем веб-приложении или используете Entity Framework, сначала запустите этот запрос на SQL-сервере и обновите вашу модель .edmx file (.edmx file) и постройте свой проект, и эта ошибка будет устранена.

Ответ 5

Есть в основном 2 разных способа вставить записи без ошибки:

1) Когда IDENTITY_INSERT установлен на OFF. ПЕРВИЧНЫЙ КЛЮЧ "ИД" НЕ ДОЛЖЕН БЫТЬ НАСТОЯЩИМ

2) Когда IDENTITY_INSERT включен. ПЕРВИЧНЫЙ КЛЮЧ "ИД" ДОЛЖЕН БЫТЬ НАСТОЯЩИМ

Согласно следующему примеру из той же таблицы, созданной с ИДЕНТИЧНЫМ КЛЮЧОМ:

CREATE TABLE [dbo].[Persons] (    
    ID INT IDENTITY(1,1) PRIMARY KEY,
    LastName VARCHAR(40) NOT NULL,
    FirstName VARCHAR(40)
);

1) В первом примере вы можете вставить новые записи в таблицу, не получая ошибки, когда IDENTITY_INSERT выключен. ПЕРВИЧНЫЙ КЛЮЧ "ID" НЕ ДОЛЖЕН БЫТЬ ПРИСУТСТВУЕТ в заявлениях "INSERT INTO", и уникальное значение ID будет добавлено автоматически:. Если в этом случае присутствует идентификатор из INSERT, вы получите сообщение об ошибке "Невозможно вставить явное значение для столбца идентификации в таблице..."

SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE'); 
INSERT INTO Persons (FirstName,LastName) 
VALUES ('JOE','BROWN');

ВЫХОД ТАБЛИЦЫ [dbo]. [Персоны] будет:

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE

2) Во втором примере вы можете вставить новые записи в таблицу, не получая ошибки, когда IDENTITY_INSERT включен. ПЕРВИЧНЫЙ КЛЮЧ "ID" ДОЛЖЕН БЫТЬ ПРИСУТСТВУЕТ из операторов "INSERT INTO", пока значение ID еще не существует: если в этом случае ID не присутствует в INSERT, вы получите ошибку "Явное значение должно быть указано для таблицы идентификаторов столбца... "

SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE'); 
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK'); 

ВЫХОД ТАБЛИЦЫ [dbo]. [Персоны] будет:

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE
3     BLACK      JACK
5     WHITE      JOHN

Ответ 6

В вашей сущности для этой таблицы добавьте атрибут DatabaseGenerated над столбцом, для которого установлена ​​вставка идентификатора:

Пример:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }

Ответ 7

вы можете просто использовать этот оператор, например, если ваше имя таблицы Школа. Перед установкой убедитесь, что для параметра identity_insert установлено значение ВКЛ, и после запроса вставки поверните идентификатор_иннеста ВЫКЛ

SET IDENTITY_INSERT School ON
/*
  insert query
  enter code here
*/
SET IDENTITY_INSERT School OFF

Ответ 8

Если вы используете Liquibase для обновления вашего SQL Server, скорее всего, вы попытаетесь вставить ключ записи в поле autoIncrement. Удалив столбец из вставки, ваш script должен работать.

<changeSet id="CREATE_GROUP_TABLE" >
    <createTable tableName="GROUP_D">
        <column name="GROUP_ID" type="INTEGER" autoIncrement="true">
            <constraints primaryKey="true"/>
        </column>
    </createTable>
</changeSet>

<changeSet id="INSERT_UNKNOWN_GROUP" >
    <insert tableName="GROUP_D">    

        <column name="GROUP_ID" valueNumeric="-1"/>
 ...
    </insert>
</changeSet>

Ответ 9

В запросе есть предварительно упомянутый OperationId, который не должен присутствовать, поскольку он автоматически увеличивается

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

поэтому ваш запрос будет

Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)

Ответ 10

Хорошо, я решил, что мой довольно простой. Убедитесь, что ваш первичный ключ с тем же именем совпадает с вашими классами, где единственное различие заключается в том, что ваш первичный ключ имеет прикрепленный к нему ID или указать [Key] на первичных ключах, которые не связаны как называется класс.

Ответ 11

Лучшее решение - использовать аннотацию GeneratedValue(strategy = ...), т.е.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column ...
private int OperationID;

там написано, что этот столбец генерируется базой данных с использованием стратегии IDENTITY, и вам не нужно об этом заботиться - база данных сделает это.

Ответ 12

  1. Это происходит, когда у вас есть столбец (Первичный ключ), для которого в SQL не установлено значение Is Identity, равное true, и вы не передаете его явное значение во время вставки. Он займет первую строку, затем вы не сможете вставить вторую строку, появится ошибка. Это можно исправить, добавив эту строку кода [DatabaseGenerated(DatabaseGeneratedOption.Identity)] в столбец PrimaryKey и убедитесь, что для него задан тип данных int. Если столбец является первичным ключом и для IsIDentity установлено значение true в SQL, для этой строки кода нет необходимости [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  2. это также происходит, когда у вас есть столбец, который не является первичным ключом, в SQL, для которого установлено значение Is Identity в true, и в EF вы не добавили эту строку кода [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Ответ 13

И если вы используете Oracle SQL Developer для подключения, не забудьте добавить /sqldev: stmt/

/sqldev: stmt/set identity_insert TABLE on;

Ответ 14

Я не уверен, что использовать для "Insert Table", но если вы просто пытаетесь вставить некоторые значения, попробуйте:

Insert Into [tablename] (OpDescription,FilterID)
values ('Hierachy Update',1);

У меня появилось такое же сообщение об ошибке, но я думаю, что это должно сработать. Идентификатор должен автоматически увеличиваться автоматически, если это первичный ключ.

Ответ 15

Проблема связана с использованием непечатаемого DBContext или DBSet, если вы используете интерфейс и реализуете метод savechanges в общем виде

Если это ваш случай, я предлагаю строго типизировать DBContex, например

MyDBContext.MyEntity.Add(mynewObject)

тогда .Savechanges будет работать

Ответ 16

Просто удалите таблицы, которые перетаскиваются в файл .dbml, и снова перетащите их. Затем Очистить решение> Восстановить решение> Построить решение.

Вот что сработало для меня.

Я не сделал таблицу самостоятельно, я использовал VS и SSMS, я перешел по этой ссылке для идентификации ASP.NET: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/добавление-САШИ-идентичность к ан-пустому или существовавшему-веб-форм-проект