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

Gilt für: SQL Server 2008

Microsoft vertreibt Microsoft SQL Server 2008-Fixes als eine herunterladbare Datei. Da die Fixes kumulativ sind, enthält jede neue Version alle Hotfixes und alle Sicherheitsupdates, die in der vorherigen Version von SQL Server 2008 behoben wurden.

Problembeschreibung


Stellen Sie sich folgendes Szenario vor:
  • 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 innerhalb einer Select -Anweisung oder einer DML-Anweisung (Data Manipulation Language) befindet.
In diesem Szenario wird eines der folgenden Probleme auftreten:
  • Wenn Sie die Abfrage innerhalb der Select -Anweisung mehrmals ausführen, erhalten Sie falsche Ergebnisse.
  • Die Tabelle kann falsche Daten enthalten, 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. So kann beispielsweise eine Insert -Anweisung fehlschlagen, und es tritt ein Fehler bei der Primärschlüsselverletzung auf, wenn die Tabelle einen Primärschlüssel aufweist.
Hinweis Diese Probleme können in einer der folgenden Situationen auftreten:
  • Sie legen die Option MAXDOP -Abfragehinweis auf einen Wert fest, der größer als 2ist.
  • Sie setzen die Option max degree of parallelism auf einen Wert, der größer als 2 in der Serverkonfiguration ist.

Fehlerbehebung


Um dieses Problem zu beheben, besorgen Sie sich das neueste Service Pack für SQL Server 2008. 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 4134-Ablaufverfolgungsflag, wenn Sie eines der folgenden Updates angewendet haben:
    • Kumulatives Updatepaket 6 für SQL Server 2008 oder ein höheres 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:
  • Verweisen Sie auf den Abschnitt "Problemumgehung" im Microsoft Knowledge Base-Artikel 970198. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
    970198 Fix: beim Ausführen einer Abfrage, die die Funktion ROW_NUMBER in SQL Server 2008 verwendet, wird ein falsches Ergebnis angezeigt