wake-up-neo.com

IDENTITY_INSERT ist auf OFF gesetzt - Wie kann ich es einschalten?

Ich habe eine Datenbankdatei für gelöschte Dateien, in der die ID der gelöschten Datei gespeichert ist. Ich möchte, dass der Administrator die Datei wiederherstellen kann (sowie dieselbe ID für das Verknüpfen von Dateien). Ich möchte nicht die gesamte Tabelle von identity_insert entfernen, da das Inkrement um eins großartig funktioniert. In meiner Einfügung in TBL_Content Store-Prozedur habe ich so etwas

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

Ich bekomme aber immer den gleichen Fehler:

In Tabelle .__ kann kein expliziter Wert für die Identitätsspalte eingefügt werden. 'TBL_Content', wenn IDENTITY_INSERT auf OFF gesetzt ist.

Irgendeine Hilfe?

86
Spooks

Sollten Sie stattdessen die Identitäts-Einfügung in der gespeicherten Prozedur aktivieren? Es sieht so aus, als würden Sie es nur beim Ändern der gespeicherten Prozedur einschalten, nicht beim Aufruf. Versuchen:

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

SET IDENTITY_INSERT tbl_content ON

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO
139
David

Sollten Sie identity_Insert nicht auf ON setzen, die Datensätze einfügen und dann wieder deaktivieren?

So was:

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
15
Abe Miessler

Ich glaube, es muss in einem einzigen Abfragenstapel ausgeführt werden. Grundsätzlich teilen die GO-Anweisungen Ihre Befehle in mehrere Stapel auf, was das Problem verursacht. Ändern Sie es zu diesem:

SET IDENTITY_INSERT tbl_content ON
/* GO */

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO
11
DCNYAM

Erinnerung

SQL Server lässt nur zu, dass die IDENTITY_INSERT-Eigenschaft einer Tabelle auf ON festgelegt ist.

Das funktioniert nicht:

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

Stattdessen:

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
9
Edu

Die Referenz: http://technet.Microsoft.com/de-de/library/aa259221%28v=sql.80%29.aspx

Meine Tabelle heißt Genre mit den 3 Spalten von Id, Name und SortOrder

Der Code, den ich verwendet habe, lautet:

SET IDENTITY_INSERT Genre ON

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

Fügen Sie diese Zeile über Ihrer Query hinzu

SET IDENTITY_INSERT tbl_content ON
3
Ankit

Add off auch hinzufügen

 SET IDENTITY_INSERT Genre ON

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

    SET IDENTITY_INSERT Genre  OFF
0