KB2589980 – FIX: Falsche Ergebnisse oder Einschränkungsverletzung beim Ausführen einer SELECT- oder DML-Anweisung, die die Funktion row_number und einen parallelen Ausführungsplan in SQL Server 2008 verwendet

Gilt für
SQL Server 2008

Microsoft stellt Fixes für Microsoft SQL Server 2008 als eine herunterladbare Datei bereit. Da die Fixes kumulativ sind, enthält jede neue Version alle Hotfixes und Sicherheitsfixes, die in der vorherigen Version der Korrektur für SQL Server 2008 enthalten waren.

Symptome

Nehmen Sie folgendes Szenario an:

  • Sie führen eine parallele Abfrage aus, die die Funktion row_number in Microsoft SQL Server 2008 verwendet.
  • Sie versuchen, die Abfrage mithilfe einer Unterabfrage auszuführen, die sich in einer SELECT-Anweisung oder einer DML-Anweisung (Data Manipulation Language) befindet.

In diesem Szenario stößt eines der folgenden Probleme auf:

  • Sie erhalten falsche Ergebnisse, wenn Sie die Abfrage mehrmals innerhalb der SELECT-Anweisung ausführen.

  • Die Tabelle enthält möglicherweise falsche Daten, wenn die Abfrage innerhalb einer DML-Anweisung ausgeführt wird. Wenn die Tabelle Einschränkungen aufweist, schlägt die Anweisung möglicherweise mit einer Einschränkungsverletzung fehl.

    Beispielsweise kann eine INSERT-Anweisung fehlschlagen, und es tritt ein Fehler wegen Verletzung des Primärschlüssels auf, wenn die Tabelle über einen Primärschlüssel verfügt.

        
Hinweis: Diese Probleme können in einer der folgenden Situationen auftreten:

  • Sie legen die MAXDOP-Abfragehinweisoption auf einen Wert fest, der größer als 2 ist.
  • Sie setzen die Option "Maximaler Grad an Parallelität" in der Serverkonfiguration auf einen Wert, der größer als 2 ist.

      

Lösung

Installieren Sie das neueste Service Pack für SQL Server 2008, um dieses Problem zu beheben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:

968382 So erhalten Sie das neueste Service Pack für SQL Server 2008

Problemumgehung

Wenden Sie eine der folgenden Methoden an, um dieses Problem zu umgehen:

  • Aktivieren Sie das Ablaufverfolgungsflag 4134, wenn Sie eines der folgenden Updates angewendet haben:

    • Kumulatives Updatepaket 6 für SQL Server 2008 oder ein späteres kumulatives Updatepaket für SQL Server 2008
    • Kumulatives Updatepaket 2 für SQL Server 2008 Service Pack 1 (SP1) oder ein höheres kumulatives Updatepaket für SQL Server 2008 SP1

    Weitere Informationen zum Aktivieren von Ablaufverfolgungsflags finden Sie auf der folgenden MSDN-Website:

    Aktivieren von Ablaufverfolgungsflags

  • Lesen Sie den Abschnitt "Problemumgehung" im Microsoft Knowledge Base-Artikel 970198. 

    Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:

    970198 FIX: Sie erhalten ein falsches Ergebnis, wenn Sie eine Abfrage ausführen, die die row_number Funktion in SQL Server 2008 verwendet