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
Ответ 5
Ссылка: http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx
Моя таблица имеет имя Genre
с тремя столбцами Id
, Name
и SortOrder
Используемый мной код:
SET IDENTITY_INSERT Genre ON
INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20)
Ответ 6
Добавьте эту строку над вами Запрос
SET IDENTITY_INSERT tbl_content ON