Когда параметр identity insert имеет значение off

«Не удается вставить явное значение столбца идентификаторов в таблицу, если параметр Identity INSERT имеет значение OFF» с составным ключом

например, если в таблице были поля ID, то теперь у нее есть Company_ID, затем ID, затем поля. Идея заключается в том, что это позволяет ИД автоинкремент для каждого Company_ID значение функции (Company_ID 1 может иметь номер 1, 2, 3 и т. д. ; Company_ID 2 может иметь номер 1, 2, 3, п.)

поле автоматического приращения остается ID. Пример таблицы :

прежде чем Company_ID был введен, чтобы выполнить CREATE, мы просто заполнили поля DescShort, TypeLookUp_ID, StatusLookUp_ID и IsActive и оставили ID, чтобы он был по умолчанию, возможно, 0.

запись была успешно сохранена, и ID был автоматически заполнен базой данных, а затем использовался для выполнения шоу через представление и так далее.

сейчас, однако, мы хотим установить Company_ID в указанное значение, оставить ID и заполнить поля, как и раньше.

Да, мы хотим указать значение Company_ID. Мы хотим, чтобы идентификатор был автоматически заполнен, как и раньше. Мы получаем сообщение об ошибке :

не удается вставить явное значение для столбца идентификаторов в таблице Project «» когда IDENTITY_INSERT имеет значение OFF

8 ответов

чтобы решить эту проблему, либо удалите свойство automatic IDENTITY из ID (если вы хотите автоматически увеличить его, вы всегда можете сделать это в своем коде обработки-получить наибольшее значение в поле, добавить к нему, а затем назначить это значение), либо перейдите в БД и установите IDENTITY _INSERT в таблице, которая временно позволяет назначать значения полям идентификаторов.

что сработало для меня в этом случае, это установить атрибут свойства первичного ключа в классе:

IDENTITY_INSERT уже был включен в моей БД.

можете ли вы попробовать 2 вещи и попробовать каждый отдельно?

удалить идентификатор из Id или добавить

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

Ок, у вас уже есть решение. но подумайте, чтобы оставить ID как уникальный первичный ключ и Company_Id как внешний ключ

Источник

Как включить и выключить Identity INSERT с помощью SQL Server 2008?

почему я получаю ошибку, делая вставку, когда IDENTITY_INSERT установлен в OFF?

Как правильно включить его в SQL Server 2008? Это с помощью SQL Server Management Studio?

я запустил этот запрос:

затем я получил сообщение обратно в консоль, что команда(Ы) успешно завершена. Однако, когда я запускаю приложение, оно по-прежнему дает мне ошибку, как показано ниже:

7 ответов

через SQL согласно MSDN

полное сообщение об ошибке говорит вам ровно что это неправильно.

не удается вставить явное значение столбца identity в таблицу «sometableWithIdentity», когда IDENTITY_INSERT имеет значение OFF.

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

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

поэтому в основном сделайте полную вставку в значения tbl(cols) (vals)

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

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

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

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

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

вам нужно добавить команду » go » после установки Identity insert. Пример:

Источник

Свойство таблицы IDENTITY INSERT в Microsoft SQL Server

Всем привет! Сегодня я расскажу о таком, в некоторых случаях очень полезном, свойстве таблицы в Microsoft SQL Server как IDENTITY_INSERT. Используя именно это свойство мы можем вставить явное значение в автоинкрементный столбец с IDENTITY, которое ранее было удалено, т.е. заполнить или восстановить пропущенные значения идентификаторов.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Наверное, у многих программистов SQL Server возникала ситуация, когда в таблице, в которой определена спецификация идентификатора, по какой-то причине удаляются некоторые записи, а затем возникает необходимость восстановить эти записи, причем со значениями старых идентификаторов.

Первое, что приходит на ум – это конечно удалить идентификацию, вставить строки с необходимыми значениями, а затем восстановить идентификацию, но для этого, как Вы понимаете, необходимо выполнить достаточно много манипуляций, которые могут повлиять на ход текущей работы, поэтому их нужно делать быстро, да и лучше в тот момент, когда в базе данных нет работающих пользователей.

Однако, на самом деле есть более простой, а главное правильный способ, который позволяет вставлять значения в столбец идентификаторов таблицы. Он заключается в использовании свойства IDENTITY INSERT.

Свойство IDENTITY_INSERT в Microsoft SQL Server

IDENTITY_INSERT – это свойство таблицы, которое позволяет вставлять явные значения в столбец идентификаторов таблицы, т.е. в столбец с IDENTITY. Значение вставляемого идентификатора может быть как меньше текущего значения, так и больше, например, для того чтобы пропустить определенный интервал значений.

При работе с данным свойством необходимо учитывать некоторые нюансы, давайте их рассмотрим:

Пример использования IDENTITY_INSERT на T-SQL

Итак, давайте рассмотрим ситуацию, когда у нас возникла необходимость вставить значение в столбец идентификаторов, допустим, строка с этим значением была удалена, а нам ее нужно восстановить.

Для начала давайте рассмотрим исходные данные.

Исходные данные

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

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Полезные материале по теме:

Удаление одной записи из таблицы

Теперь давайте удалим строку, в которой значение идентификатора равняется 3.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Мы видим, что запись удалена.

Восстановление удаленной записи с определенным значением идентификатора

У нас в таблице отсутствует запись со значение и нам ее нужно восстановить именно с для этого мы, как начинающие программисты SQL, пробуем сначала так.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Как видим, у нас не получилось вставить такую строку, SQL Server вернул ошибку «Невозможно вставить явное значение для столбца идентификаторов в таблице».

Чтобы все-таки добавить запись с данным значением, давайте используем свойство IDENTITY_INSERT, т.е. выставим его значение для таблицы TestTable в ON.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

На этот раз все прошло успешно, и запись с восстановленным значением идентификатора, как видим, добавлена.

Примечание! Если столбец с идентификатором является первичным ключом, как в нашем примере, то при попытке вставить значение идентификатора, которое уже есть, сработает ограничение PRIMARY KEY, другими словами, уникальные ключи продолжают действовать.

Заметка! Для комплексного изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL, в которых используется последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL.

На этом у меня все, надеюсь, материал был Вам полезен!

Источник

SET IDENTITY_INSERT (Transact-SQL)

Позволяет вставлять явные значения в столбец идентификаторов таблицы.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение offСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

database_name
Имя базы данных, в которой находится указанная таблица.

schema_name
Имя схемы, которой принадлежит таблица.

table_name
Имя таблицы со столбцом идентификаторов.

Remarks

В каждый момент времени только для одной таблицы в сеансе свойство IDENTITY_INSERT может принимать значение ON. Если у какой-то таблицы это свойство уже имеет значение ON и инструкция SET IDENTITY_INSERT ON адресована другой таблице, SQL Server вернет сообщение об ошибке, в котором будет сказано, что свойство SET IDENTITY_INSERT уже приняло значение ON, и приведено имя соответствующей таблицы.

Если вставляемое значение больше текущего значения идентификатора в данной таблице, SQL Server автоматически будет использовать вставленное значение в качестве текущего.

Задание параметра SET IDENTITY_INSERT происходит во время выполнения или запуска инструкций, а не их синтаксического анализа.

Разрешения

Пользователь должен быть владельцем таблицы или иметь разрешение ALTER на таблицу.

Примеры

Источник

Когда параметр identity insert имеет значение off

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

IDENTITY_INSERT имеет значение OFF
Аспид
Автор

Сообщений: 3475
Откуда: Москва

Дата: 19.02.10 10:18:41

После некоторых манипуляций с таблицей, вдруг стала выскакивать такая ошибка при работе из под VFP.

Выполняю простейший запрос.

Тщательно проверил весь код. На всякий случай захожу под sa.

Написал маленький модуль, где коннект (как мне кажется, один в один как в приложении). Так из под него все заработало.
Не пойму куда копать.
Про IDENTITY_INSERT в BOL вроде все нашел. Как это ко мне относится, не пойму.

Может кто то толкнет в правильном направлении?

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
PaulWist

Сообщений: 13765

Дата: 19.02.10 10:26:16

Перевести таблу в IDENTITY_INSERT ON

Где-то выдается команда

надо анализировать трассу.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
Аспид
Автор

Сообщений: 3475
Откуда: Москва

Дата: 19.02.10 10:40:14

Где-то выдается команда

Ну в BOL про SET IDENTITY_INSERT написано
«Позволяет вставлять явные значения в столбец идентификаторов таблицы.»
Ну и конечно давно попробывал.
Более того. Таблица и должна быть в OFF.
Никакого идентификатора, я в запросе не меняю.
И не собираюсь заполнять пропущенные значения.

Вообще не понимаю, откуда такая ошибка взялась?

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
PaulWist

Сообщений: 13765

Дата: 19.02.10 10:52:53

Аспид
Ну в BOL про SET IDENTITY_INSERT написано
«Позволяет вставлять явные значения в столбец идентификаторов таблицы.»
Ну и конечно давно попробывал.
Более того. Таблица и должна быть в OFF.
Никакого идентификатора, я в запросе не меняю.
И не собираюсь заполнять пропущенные значения.

Вообще не понимаю, откуда такая ошибка взялась?

Если всё «так и должно быть», то вставляй руками значение в поле ID_MODEL, а иначе нафига ты переводишь таблу в OFF.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
Аспид
Автор

Сообщений: 3475
Откуда: Москва

Дата: 19.02.10 11:04:15

Да нет Пашь.
Это On разоешает вводить в определенных случаях данные в IDENTITY.
Off по умолчанию. Запрещено.
И не надо мне ничего туда вводить.
Вот запрос:
INSERT INTO dbo.Model (txt) VALUES(‘111’)

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
PaulWist

Сообщений: 13765

Дата: 19.02.10 11:14:57

Черт, всё наоборот Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Что отсылается на сервер, приведи трассу.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
Аспид
Автор

Сообщений: 3475
Откуда: Москва

Дата: 19.02.10 11:28:21

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off
Эксперимент закончен)))
База рабочая.
(Хорошо таблица статичная, практически не обновляется.)
Удалил старую. Создал новую, залил данные, все работает.

Но попробую на тестовой повторить номер.
Что было.
Мне надо было эту таблицу, синхронизировать с другой базой.
Операция разовая.
Поэтому сделал truncate
Отключил IDENTITY, что бы залить из другой базы.
Потом IDENTITY подключил.
И началось.

Проделывал такое не раз.
Но всплыло такое впервые. (((

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
vfox

Сообщений: 761
Откуда: Moscow

Дата: 19.02.10 11:53:53

Может вы не учитываете следующее:
В каждый момент времени только для одной таблицы в сеансе свойство IDENTITY_INSERT может принимать значение ON. Если у какой-то таблицы это свойство уже имеет значение ON и инструкция SET IDENTITY_INSERT ON адресована другой таблице, SQL Server вернет сообщение об ошибке, в котором будет сказано, что свойство SET IDENTITY_INSERT уже приняло значение ON, и приведено имя соответствующей таблицы.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
Аспид
Автор

Сообщений: 3475
Откуда: Москва

Дата: 19.02.10 12:19:02

Да я БОЛ по этой инструкции чуть не наизусть уже выучил)))
Не лезу я ид в своих вставках.
А он ругается.
Причем, только в определенных случаях.

Что за настройки из фокса такие попадали на МС, что вызывало такую ошибку?

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
vfox

Сообщений: 761
Откуда: Moscow

Дата: 19.02.10 13:05:05

Да я БОЛ по этой инструкции чуть не наизусть уже выучил)))
Не лезу я ид в своих вставках.
А он ругается.
Причем, только в определенных случаях.

Что за настройки из фокса такие попадали на МС, что вызывало такую ошибку?

Чудес не бывает. Может вы вставку делаете в другом коннекте или разываете соединение. Если вы внимательно читали BOL, то обратили внимание, что установка эта уровня сессии.

Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Re: IDENTITY_INSERT имеет значение OFF
Аспид
Автор

Сообщений: 3475
Откуда: Москва

Дата: 19.02.10 13:11:45

В общем, непонятно мне чо то.

Можа вирус какой завелся? Когда параметр identity insert имеет значение off. Смотреть фото Когда параметр identity insert имеет значение off. Смотреть картинку Когда параметр identity insert имеет значение off. Картинка про Когда параметр identity insert имеет значение off. Фото Когда параметр identity insert имеет значение off

Но пока не удается вернуть ситуацию.

Бум надеяться никогда больше такого не случится, и так и помру, не докопавшись до истины)))

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *