IDENTITY_INSERT jest wyłączone - jak to włączyć?


112

Mam usuniętą bazę danych archiwum plików, która przechowuje identyfikator usuniętego pliku, chcę, aby administrator mógł przywrócić plik (a także ten sam identyfikator do łączenia plików). Nie chcę usuwać identyczności_insert z całej tabeli, ponieważ przyrost o jeden działa świetnie. W mojej TBL_Contentprocedurze insert to store mam coś takiego

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

Ale ciągle otrzymuję ten sam błąd:

Nie można wstawić jawnej wartości dla kolumny tożsamości w tabeli „TBL_Content”, gdy parametr IDENTITY_INSERT jest ustawiony na OFF.

Jakaś pomoc?

Odpowiedzi:


174

Czy zamiast tego należy ustawić wstawianie tożsamości na włączone w procedurze składowanej? Wygląda na to, że włączasz ją tylko podczas zmiany procedury składowanej, a nie podczas jej rzeczywistego wywoływania. Próbować:

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

SET IDENTITY_INSERT tbl_content ON

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

16

Czy nie powinieneś ustawić identity_Insert ON, wstawić rekordy, a następnie wyłączyć?

Lubię to:

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

14

Uważam, że należy to zrobić w jednej partii zapytań. Zasadniczo instrukcje GO dzielą polecenia na wiele partii i to powoduje problem. Zmień to na:

SET IDENTITY_INSERT tbl_content ON
/* GO */

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

1
Masz rację. O to chodzi! Następna partia poleceń dla wstawiania powinna zaczynać się od SET IDENTITY_INSERT tbl_content ON; polecenie ponownie.
Jettero

9

Przypomnienie

SQL Server zezwala tylko jednej tabeli na ustawienie właściwości IDENTITY_INSERT na ON.

To nie działa:

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

Zamiast:

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


4

Dodaj tę linię nad tobą Zapytanie

SET IDENTITY_INSERT tbl_content ON

2

Dodaj również wyruszenie

 SET IDENTITY_INSERT Genre ON

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

    SET IDENTITY_INSERT Genre  OFF
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.