Benutzer mit den meisten Antworten
SQL Server 2014 Probleme mit Insert

Frage
-
Guten Tag Zusammen,
ich habe ein Problem. In einer gespeicherten Prozedur wird eine temp. Tabelle angelegt, die eine ID Spalte hat.
Identity_Insert wird danach auf ON gestellt und ein Insert gemacht.
Beim ersten Aufruf wird die Storproc ausgeführt, beim zweiten Mal bricht er mit dem Fehler ab und schließt die Verbindung:
Meldung 0, Ebene 11, Status 0, Zeile 0
Für den aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten. Löschen Sie eventuelle Ergebnisse.Führe ich danach die Storproc erneut aus, funktioniert es wieder.
Die Tabelle ist wie folgt definiert:
Create Table #UserVariante (Ebene INTEGER,
ParentID INTEGER,
ChildID INTEGER Identity(1, 1),
ChildKey VARCHAR(255) Collate database_Default,
Bezeichnung VARCHAR(400) Collate database_Default,
Typ VARCHAR(20) Collate database_Default,
Sortierung INTEGER,
Variante VARCHAR(20) Collate database_Default,
L1_Key VARCHAR(60) Collate database_Default,
L2_Key VARCHAR(60) Collate database_Default,
L3_Key VARCHAR(60) Collate database_Default,
L4_Key VARCHAR(60) Collate database_Default,
L5_Key VARCHAR(60) Collate database_Default,
L6_Key VARCHAR(60) Collate database_Default,
L7_Key VARCHAR(60) Collate database_Default,
L8_Key VARCHAR(60) Collate database_Default,
L9_Key VARCHAR(100) Collate database_Default,
L9_Bezug VARCHAR(100) Collate database_Default,
Counter INTEGER,
DetailTiefe INTEGER)Nach dem Identity_Insert = On kommt dann folgender Insert:
Set @Level = isNull(@Level, -1)
Insert Into #UserVariante (Ebene, ParentID, ChildID, ChildKey, Bezeichnung, Typ, Sortierung, DetailTiefe)
Select @Level, -1, isNull(@FirstChildKey, 1), 'Root', 'interne Rootebene', 'Root', 0, 1Zu dem Zeitpunkt ist der @FirstChildKey noch '0'.
Den Effekt habe ich aber nur in der SQL2014 Instanz, die 2012er und 2008R2er funktioniert ohne Probleme.
Vielen Dank für gute Ideen
Gruß U.S.
Antworten
-
Hallo,
ja identity_insert off wird wieder gesetzt danach. Ich habe als Workaround eine Versionsprüfung eingebaut, die die Indizes nur bei SQL Server 2012 und kleiner aufbaut.
Hat jemand schon ein Feedback von MS, ob und wann das Problem gefixt wird?
Danke und allen einen erfolgreichen Tag
U. S.
- Als Antwort markiert Ionut DumaModerator Mittwoch, 11. Juni 2014 13:55
Alle Antworten
-
Hallo,
ich habe hier gerade keinen SQL Server 2014, so dass ich das Problem nicht nachstellen kann. Sieht aber nach einem Bug aus, siehe z. B.: MS SQL Server 2014: Error inserting into Temp table with index and identity field
Unabhängig davon, solltest Du auf IDENTITY_INSERT möglichst verzichten, die Anweisung ist von Haus aus problematisch, da sieh immer nur auf eine Tabelle pro Sitzung aktiv sein kann.
Wenn Du hier die Daten aus einer bestehenden Tabellen einfügst, so lasse die IDENTITY-Klausel bei der temporären Tabelle weg - womit die Notwendigkeit dafür entfällt. Solltest Du einen laufenden (Primär-)Schlüssel benötigen, füge ihn als zusätzliche Spalte ein.
Gruß Elmar
- Als Antwort vorgeschlagen Andreas.WolterMicrosoft employee Freitag, 9. Mai 2014 09:31
-
Hallo,
ja identity_insert off wird wieder gesetzt danach. Ich habe als Workaround eine Versionsprüfung eingebaut, die die Indizes nur bei SQL Server 2012 und kleiner aufbaut.
Hat jemand schon ein Feedback von MS, ob und wann das Problem gefixt wird?
Danke und allen einen erfolgreichen Tag
U. S.
- Als Antwort markiert Ionut DumaModerator Mittwoch, 11. Juni 2014 13:55