Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Problembeschreibung

Nehmen Sie auf einem Computer, auf dem Microsoft SQL Server 2008 ausgeführt wird, die folgenden Szenarien in Frage.

Szenario 1

Sie geben einen allgemeinen Tabellenausdruck (CTE) an, indem Sie die with-Anweisung verwenden. Führen Sie beispielsweise die folgende Abfrage aus.

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

Führen Sie dann diese Abfrage aus.

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

In diesem Szenario speichert der zwischengespeicherte Abfrageplan für diese Abfrage falsche statement_start_offset-und statement_end_offset Werte. Insbesondere beachten Sie, dass der statement_end_offset-Wert kleiner als der statement_start_offset Wert ist, wenn Sie sys.dm_exec_query_stats Dynamic Management View (DMV) ausführen. Aufgrund dieses Problems kann ein Leistungsbericht fehlschlagen, wenn im Bericht davon ausgegangen wird, dass der statement_start_offset Wert immer kleiner als der statement_stop_offset Wert ist.

Szenario 2

Sie geben einen allgemeinen Tabellenausdruck mithilfe der with-Anweisung an, und Sie verwenden die Option kompilieren. Beispielsweise erstellen Sie eine Funktion in SQL Server 2008 mithilfe des folgenden Skripts.

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

Wenn Sie eine "SELECT dbo. function1 ()"-Abfrage ausführen, wird die folgende Fehlermeldung angezeigt:

Für den aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten. Die Ergebnisse, falls vorhanden, sollten verworfen werden.

Darüber hinaus kann dieser Fehler ohne die Option zum erneuten Kompilieren auftreten, wenn der Server Datenverkehr in SQL Server stark belastet wird.

Szenario 3

Sie geben einen allgemeinen Tabellenausdruck an, indem Sie die with-Anweisung verwenden. In der with-Anweisung geben Sie eine Tabelle an, die nicht vorhanden ist. Führen Sie beispielsweise die folgende Abfrage aus.

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

Wenn Sie diese Abfrage ausführen, erhalten Sie keinen Fehler für die fehlende Tabelle.

Ursache

Diese Probleme treten aufgrund einer fehlerhaften Verarbeitung einer SELECT-Anweisung auf, die einer with-Anweisung folgt. Die with-Anweisung verwendet die folgende Syntax.

WITH common_table_expression AS(CTE_query_definition)

Diese Anweisung erstellt dann eine Ergebnismenge, die dem angegebenen allgemeinen Tabellenausdrucks Namen zugewiesen ist. Anschließend folgen Sie dieser Anweisung mit einer SELECT-Anweisung. Wenn diese zweite Anweisung in Klammern eingeschlossen ist und Sie versuchen, eine Operation für die Ergebnisse auszuführen, oder wenn Sie versuchen, eine sys.dm_exec_query_stats dynamische Verwaltungsansicht auszuführen, erhalten Sie falsche Ergebnisse oder einen Fehler.

Fehlerbehebung

Service Pack-Informationen 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

Um diese Probleme zu umgehen, müssen Sie die Klammern aus der Anweisung entfernen, die dem allgemeinen Tabellenausdruck folgt. Nehmen Sie beispielsweise die folgende with-Anweisung in Frage, die solche Klammern verwendet.

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

Um diese Probleme zu umgehen, ändern Sie die folgende with-Anweisung, die diese Klammern nicht verwendet.

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

Status

Microsoft hat bestätigt, dass es sich um ein Problem mit den Microsoft-Produkten handelt, die im Abschnitt "gilt für" aufgeführt sind. Dieses Problem wurde zuerst in SQL Server 2008 Service Pack 2 (SP2) behoben.

Weitere Informationen

Weitere Informationen zum Verwenden der with-Anweisung mit einem allgemeinen Tabellenausdruck finden Sie auf der folgenden MSDN-Website:

Mit common_table_expression (Transact-SQL)Weitere Informationen zu sys.dm_exec_query_stats finden Sie auf der folgenden MSDN-Website:

sys.dm_exec_query_stats (Transact-SQL)

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×