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.

помочь?

7 77

7 ответов:

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

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

SET IDENTITY_INSERT tbl_content ON

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

разве вы не должны устанавливать identity_Insert, вставляя записи, а затем выключая его?

такой:

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

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

SET IDENTITY_INSERT tbl_content ON
/* GO */

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

напоминание

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

Ссылка:http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx

моя таблица называется Genre С 3 столбцами Id,Name и SortOrder

код, который я использовал как:

SET IDENTITY_INSERT Genre ON

INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20) 

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

SET IDENTITY_INSERT tbl_content ON

добавить зачет также

 SET IDENTITY_INSERT Genre ON

    INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20) 

    SET IDENTITY_INSERT Genre  OFF