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 ответов:
вместо этого вы должны установить 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)