У меня есть ошибка ниже, когда я выполняю следующий скрипт. В чем заключается ошибка и как ее можно устранить?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Ошибка:
Сервер: Msg 544, Уровень 16, Состояние 1, Линия 1
Невозможно вставить явное значение для столбца идентификаторов в таблице «таблица», если для параметра IDENTITY_INSERT установлено значение OFF.
sql
sql-server
sybase
Мартин Клейтон
источник
источник
Ответы:
Вы вводите значения для
OperationId
этого столбца идентичности.Вы можете включить вставку идентификатора в таблицу таким образом, чтобы указать свои собственные значения идентификаторов.
источник
не присваивайте значение OperationID, потому что оно будет сгенерировано автоматически. попробуй это:
источник
это работает только одна таблица базы данных, например, если имя таблицы является студентом, запрос выглядит так
SET IDENTITY_INSERT student ON
источник
Будьте очень осторожны при установке IDENTITY_INSERT на ON. Это плохая практика, если база данных не находится в режиме обслуживания и не настроена для одного пользователя. Это влияет не только на вашу вставку, но и на тех, кто пытается получить доступ к таблице.
Почему вы пытаетесь поместить значение в поле идентичности?
источник
Есть в основном 2 разных способа вставить записи без ошибки:
1) Когда IDENTITY_INSERT установлен на OFF. ПЕРВИЧНЫЙ КЛЮЧ «ИД» НЕ ДОЛЖЕН БЫТЬ НАСТОЯЩИМ
2) Когда IDENTITY_INSERT включен. ПЕРВИЧНЫЙ КЛЮЧ «ИД» ДОЛЖЕН БЫТЬ НАСТОЯЩИМ
Согласно следующему примеру из той же таблицы, созданной с ИДЕНТИЧНЫМ КЛЮЧОМ:
1) В первом примере вы можете вставить новые записи в таблицу, не получая ошибки, когда IDENTITY_INSERT выключен. ПЕРВИЧНЫЙ КЛЮЧ «ИД» не должен присутствовать от отчетности «Вставить в» и уникальное значение идентификатора будет добавлено автоматически: . Если в этом случае присутствует идентификатор из INSERT, вы получите сообщение об ошибке «Невозможно вставить явное значение для столбца идентификации в таблице ...»
ВЫХОД ТАБЛИЦЫ [dbo]. [Персоны] будет:
2) Во втором примере вы можете вставить новые записи в таблицу, не получая ошибки, когда IDENTITY_INSERT включен. ПЕРВИЧНЫЙ КЛЮЧ «ИД» ДОЛЖЕН БЫТЬ ПРИСУТСТВУЕТ из операторов «ВСТАВИТЬ В», если значение ИД еще не существует : если в этом случае ИД НЕ присутствует в ВСТАВКЕ, вы получите ошибку «Явное значение должно быть указано для таблицы идентификаторов столбца ... »
ВЫХОД ТАБЛИЦЫ [dbo]. [Персоны] будет:
источник
В вашей сущности для этой таблицы добавьте
DatabaseGenerated
атрибут над столбцом, для которого установлена вставка идентификатора:Пример:
источник
DatabaseGeneratedOption.Identity
, и я все еще получаю ошибку. Это моя вина, я помещаю псевдо-идентификаторы в новые строки, чтобы отличать их друг от друга на моей веб-странице, и я надеюсь, что просто обнулять их до того, какinsert
будет достаточно.Вы можете просто использовать это утверждение, например, если ваша таблица называется Школа . Перед введением УБЕДИТЕСЬ IDENTITY_INSERT установлен в положение ON и после вставки запроса поворота IDENTITY_INSERT OFF
источник
Если вы используете liquibase для обновления вашего SQL Server, вы, вероятно, пытаетесь вставить ключ записи в поле autoIncrement. После удаления столбца из вставки ваш скрипт должен запуститься.
источник
В вашем запросе есть упомянутый OperationId, которого не должно быть, поскольку он автоматически увеличивается
так что ваш запрос будет
источник
Другая ситуация состоит в том, чтобы проверить, что первичный ключ имеет то же имя, что и у ваших классов, где единственное отличие состоит в том, что к первичному ключу добавлен «ID», или указать [Key] для первичных ключей, которые не связаны с тем, как класс назван.
источник
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
в столбец PrimaryKey и убедитесь, что для него задан тип данных int . Если столбец является первичным ключом и для IsIDentity в SQL задано значение true, в этой строке кода нет необходимости[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
источник
Лучшее решение - использовать аннотацию
GeneratedValue(strategy = ...)
, т.е.он говорит, что этот столбец генерируется базой данных, используя стратегию IDENTITY, и вам не нужно заботиться - база данных сделает это.
источник
Если у вас возникла эта проблема при использовании sql-сервера с sequelize-typescript npm, обязательно добавьте
@AutoIncrement
в столбец ID:источник
И если вы используете Oracle SQL Developer для подключения, не забудьте добавить / sqldev: stmt /
/ sqldev: stmt / установить identity_insert TABLE в;
источник
Я не уверен, что использовать для «Вставка таблицы», но если вы просто пытаетесь вставить некоторые значения, попробуйте:
У меня было такое же сообщение об ошибке, но я думаю, что это должно работать. Идентификатор должен автоматически увеличиваться до тех пор, пока это первичный ключ.
источник
Я решил эту проблему, создавая новый объект каждый раз, когда я хочу добавить что-либо в базу данных.
источник
Обратите внимание, что если вы закрываете каждую строку
;
,SET IDENTITY_INSERT mytable ON
команда не будет выполняться для следующих строк.т.е.
запрос как
Выдает ошибку
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.
Но такой запрос будет работать:
Кажется, что
SET IDENTITY_INSERT
команда выполняется только для транзакции, и она;
будет означать конец транзакции.источник
Проблема возникает из-за использования нетипизированного DBContext или DBSet, если вы используете интерфейс и реализуете метод сохранения изменений общим способом.
Если это ваш случай, я предлагаю, например, строго типизированный DBContex
тогда
.Savechanges
будет работатьисточник
Просто удалите таблицы, которые перетаскиваются в файл .dbml, и снова перетащите их. Затем Очистить решение> Восстановить решение> Построить решение.
Вот что сработало для меня.
Я не сделал таблицу самостоятельно, я использовал VS и SSMS, я перешел по этой ссылке для идентификации ASP.NET: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/ добавление-САШИ-идентичность к ан-пустому или существовавшему-веб-форм-проект
источник