IDENTITY_INSERT установлен в положение OFF - как включить его?

У меня есть база данных удаленных файловых архивов, в которой хранится идентификатор удаляемого файла, я хочу, чтобы администратор мог восстановить файл (а также тот же идентификатор для связывания файлов). Я не хочу отбирать identity_insert со всей таблицы, так как приращение на один отлично работает. В моей вставке в процедуру хранения TBL_Content у меня есть что-то вроде этого

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 
...insert command...
SET IDENTITY_INSERT tbl_content OFF

Но я все равно получаю ту же ошибку:

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

Любая помощь?

Ответ 1

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

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 

SET IDENTITY_INSERT tbl_content ON

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

Ответ 2

Не следует ли устанавливать идентификацию_Insert ON, вставляя записи и затем отключая их?

Вот так:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 
SET IDENTITY_INSERT tbl_content ON
...insert command...
SET IDENTITY_INSERT tbl_content OFF

Ответ 3

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

SET IDENTITY_INSERT tbl_content ON
/* GO */

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

Ответ 4

Напоминание

SQL Server разрешает только одной таблице иметь свойство IDENTITY_INSERT в положение ON.

Это не работает:

SET IDENTITY_INSERT TableA ON
SET IDENTITY_INSERT TableB ON
... INSERT ON TableA ...
... INSERT ON TableB ...
SET IDENTITY_INSERT TableA OFF
SET IDENTITY_INSERT TableB OFF

Вместо

SET IDENTITY_INSERT TableA ON
... INSERT ON TableA ...
SET IDENTITY_INSERT TableA OFF
SET IDENTITY_INSERT TableB ON
... INSERT ON TableB ...
SET IDENTITY_INSERT TableB OFF

Ответ 6

Добавьте эту строку над вами Запрос

SET IDENTITY_INSERT tbl_content ON