SQL SET IDENTITY_INSERT ON ohne effekt

M.E.

Lt. Commander
Registriert
Jan. 2007
Beiträge
1.923
Hallo,

Für einen Datenbankimport auf eine Tabelle muss ich sicherstellen, dass die Prmärschlüssel aus der alten Datenbank in der neuen Datenbank gleich sind. Prinzipiell sollte es hier auch keine Konflikte geben, da die neue Tabelle zuerst geleert wird, bevor die Daten aus der alten Datenbank eingefügt werden.
Ich arbeite auf einem MS SQL Server.

Die Tabelle in der neuen Datenbank hat folgendes Schema:
Code:
CREATE TABLE [dbo].[T_archiv](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[columnX] [varchar](4) NULL,
	[columnY] [varchar](50) NULL,
     ....
	[columnZ] [nvarchar](10) NULL,
 CONSTRAINT [PK_T_archiv] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

Die Daten werden direkt aus einer temporären Tabelle in derselben DB kopiert. Dazu gehe ich folgendermaßen vor:
Code:
SET IDENTITY_INSERT T_archiv ON
GO

INSERT INTO T_archiv
(
    [ID], 
    [columnX] ,
    [columnY] ,
    ...
    [columnZ]
)
SELECT 
    [ID],
    [columnX] ,
    [columnY] ,
    ....
   [columnZ]
FROM T_archiv_tmp

Nach dem Ausführen dieses Statements stehen die Datensätze aus T_archiv_tmp in T_archiv. Allerdings haben sich die Primärschlüssel geändert und fangen bei 1 an und zählen dann hoch, wie beim regulären Einfügen.
Dabei habe ich doch SET IDENTITY_INSERT T_archiv ON verwendet.
Warum hat das keinen Effekt? Ich habe die ALTER Rechte auf der Tabelle, die dafür notwendig sind.

Ich habe auch schon probiert das PK_T_archiv temporär wegzunehmen oder die ID Spalte zu modifizieren und die IDENTITY(1,1) Eigenschaft für meine Zwecke zu entfernen. Leider alles ohne Erfolg.

Woran kann es noch liegen?

MfG
M.E.
 
Ich kann dir zwar nicht direkt weiterhelfen, aber wenn du IDENTITY_INSERT auf ON änderst, würde ich es am Ende deines Scripts wieder auf OFF setzen. Vielleicht hat es damit zu tun?
 
Das mache ich sowieso.
Ich habe hier den Code nur sehr gekürzt um das Wesentliche herauszustellen.

Ich bekomme übrigens auch keinerlei Fehlermeldungen, lediglich die Erfolgsmeldung "27192 Zeilen betroffen".

Kann es vielleicht sein, dass IDENTITY_INSERT ON auf irgendeiner anderen Tabelle gesetzt ist und ich es deshalb nicht bekomme? Wie könnte ich das überprüfen?
 
Meines Wissens schließt das Schlüsselwort "GO" einen Batch ab. Damit gilt dein IDENTITY_INSERT nur bis zum "GO".
Hast du es schonmal ohne das "GO" dazwischen versucht?
 
Was passiert, wenn du nur den SET-Befehl absetzt? Bekommst du dann eine Warnung o.ä.?
Laut MS darf jeweils immer nur 1 Tabelle den Wert auf ON haben...
 
Zurück
Oben