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) Но скорее всего это наоборот всё поломает