none
SQL Server 2014 Probleme mit Insert RRS feed

  • 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, 1

    Zu 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.

    Freitag, 9. Mai 2014 07:13

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.

    Dienstag, 13. Mai 2014 06: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

    Freitag, 9. Mai 2014 08:12
    Beantworter
  • Zusätzliche Info: Das Cumulative Update, was für den SQL Server 2014 bereits verfügbar ist, wurde bereits installiert
    Freitag, 9. Mai 2014 08:13
  • hallo U.S.

    fuehrst Du das Pendant zu  Identity_Insert = On  nach dem Einfuegen auch aus ?


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Freitag, 9. Mai 2014 19:24
  • 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.

    Dienstag, 13. Mai 2014 06:55