Когда параметр identity insert имеет значение off
Перейти к содержимому

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

  • автор:

SET IDENTITY_INSERT (Transact-SQL)

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

Синтаксис

 SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

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

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

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

Замечания

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

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

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

Разрешения

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

Примеры

В следующем примере создается таблица со столбцом идентификаторов, и показывается, как можно использовать параметр SET IDENTITY_INSERT для заполнения промежутков между значениями идентификаторов, вызванных выполнением инструкции DELETE .

USE AdventureWorks2022; GO -- Create tool table. CREATE TABLE dbo.Tool( ID INT IDENTITY NOT NULL PRIMARY KEY, Name VARCHAR(40) NOT NULL ); GO -- Inserting values into products table. INSERT INTO dbo.Tool(Name) VALUES ('Screwdriver') , ('Hammer') , ('Saw') , ('Shovel'); GO -- Create a gap in the identity values. DELETE dbo.Tool WHERE Name = 'Saw'; GO SELECT * FROM dbo.Tool; GO -- Try to insert an explicit ID value of 3; -- should return an error: -- An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON. INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel'); GO -- SET IDENTITY_INSERT to ON. SET IDENTITY_INSERT dbo.Tool ON; GO -- Try to insert an explicit ID value of 3. INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel'); GO SELECT * FROM dbo.Tool; GO -- Drop products table. DROP TABLE dbo.Tool; GO 

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

Здравствуйте!
Платформа 8.3.15.1830 (x64)

Хочу с помощью менеджера записи изменить значение одного поля, но выдается следующая ошибка:

: Ошибка при вызове метода контекста (Записать)
ЗаписьТаблицыВнешнейБД.Записать();
по причине:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 23000
Номер ошибки: 544
Описание: [Microsoft][SQL Server Native Client 11.0][SQL Server]Невозможно вставить явное значение для столбца идентификаторов в таблице «build_main», когда параметр IDENTITY_INSERT имеет значение OFF.

Собственно, вот кусок кода, где возникает ошибка:

ЗаписьТаблицыВнешнейБД = ВнешниеИсточникиДанных.УчетВесовогоМатериала.Таблицы.ОсновнаяТаблицаУчета.СоздатьМенеджерЗаписи();
ЗаписьТаблицыВнешнейБД.НомерСтроки = СтрокаТЗ.НомерСтроки;
ЗаписьТаблицыВнешнейБД.Прочитать();

ЗаписьТаблицыВнешнейБД.ЗагруженоВ1С = 1;
ЗаписьТаблицыВнешнейБД.Записать();

Основные свойства таблицы:
Тип данных таблицы внешнего источника данных — НеобъектныеДанные
Поле ключа — НомерСтроки
Только чтение — Ложь

У всех столбцов, кроме «ЗагруженоВ1С», свойство Только чтение установлено в значение Истина

Из-за чего может возникать ошибка?

Я так понимаю, что сама ошибка говорит о том, что я якобы пытаюсь вставить новую строку с установленным значением ключевого поля. Почитал описание процедуры Записать(), там действительно написано, что изменение записи происходит путем удаления текущей записи и вставки новой измененной. Так а почему оно не работает тогда? Поле ключа ведь обозначено как только для чтения, зачем 1С его заполняет, по логике, должна добавиться новая запись, с новым ID, но этого не происходит. Но этого и не хотелось бы, хочется, чтобы обычный UPDATE по ключу сработал. Никто не знает как с этим разобраться?

Исправление: при вставке строки, содержащей явное значение идентификатора, в таблицу со столбцом ИДЕНТИФИКАТОРов и IDENTITY_INSERT по умолчанию в SQL Server не работает Вставка

SQL Server 2019 on Windows SQL Server 2019 on Linux SQL Server 2016 Service Pack 2 SQL Server 2016 Developer — duplicate (do not use) SQL Server 2016 Enterprise — duplicate (do not use) SQL Server 2016 Enterprise Core — duplicate (do not use) SQL Server 2016 Standard — duplicate (do not use) Еще. Меньше

Проблемы

Предположим, что вы используете инструкцию INSERT EXEC для вставки строки, которая содержит явное значение Identity, в таблицу с ИДЕНТИФИЦИРУЮЩИм столбцом, а IDENTITY_INSERT по умолчанию ОТКЛЮЧЕНа в Microsoft SQL Server 2019 и 2016. Обратите внимание на то, что инструкция INSERT EXEC работает неправильно. Ожидаемым поведением является то, что оператор не завершает работу и возвращает следующее сообщение об ошибке:

Не удается вставить явное значение для столбца идентификаторов в таблице «TableName>», если IDENTITY_INSERT установлен в OFF

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе «Применяется к».

Решение

Эта проблема исправлена в перечисленных ниже накопительных обновлениях для SQL Server.

  • Накопительное обновление 6 для SQL Server 2019
  • Накопительное обновление 14 для SQL Server 2016 с пакетом обновления 2 (SP2)

Сведения о накопительных обновлениях для SQL Server.

Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.

  • Последнее накопительное обновление для SQL Server 2019
  • Последнее накопительное обновление для SQL Server 2016

Ссылки

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

Ошибка когда параметр IDENTITY_INSERT имеет значение OFF WPF C# MS SQL

Добрый день, сообщество, выше дан код. При записи в базу, т.е. при нажатии кнопки срабатывает исключение:

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

Что делать? Идентификатор в БД для этой таблицы включён и начинается с 1.
Отслеживать
задан 7 мая 2023 в 4:44
e.shikhanov e.shikhanov
53 7 7 бронзовых знаков

Мало информации, скорее всего что-то можно найти в AppConnect, можно конечно ещё выставить SET IDENTITY_INSERT ON) Но скорее всего это наоборот всё поломает

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

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