Freigeben über


SET SHOWPLAN_TEXT (Transact-SQL)

Bewirkt, dass SQL ServerTransact-SQL-Anweisungen nicht ausführt. Stattdessen gibt SQL Server Informationen zur Ausführung der Anweisungen zurück.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

SET SHOWPLAN_TEXT { ON | OFF }

Hinweise

Die Einstellung von SET SHOWPLAN_TEXT wird zur Ausführungszeit und nicht zur Analysezeit festgelegt.

Wenn SET SHOWPLAN_TEXT auf ON festgelegt ist, gibt SQL Server Ausführungsinformationen für jede Transact-SQL-Anweisung zurück, ohne sie auszuführen. Wenn diese Option auf ON festgelegt ist, werden Ausführungsplaninformationen zu allen weiteren SQL Server-Anweisungen zurückgegeben, bis die Option auf OFF festgelegt wird. Wenn beispielsweise eine CREATE TABLE-Anweisung ausgeführt wird, während SET SHOWPLAN_TEXT auf ON festgelegt ist, gibt SQL Server bei einer nachfolgenden SELECT-Anweisung, die dieselbe Tabelle betrifft, eine Fehlermeldung zurück. In dieser wird der Benutzer informiert, dass diese Tabelle nicht vorhanden ist. Daher schlagen spätere Verweise auf diese Tabelle fehl. Wenn SET SHOWPLAN_TEXT auf OFF festgelegt wird, führt SQL Server Anweisungen aus, ohne einen Bericht mit Ausführungsplaninformationen zu generieren.

Verwenden Sie SET SHOWPLAN_TEXT, um eine lesbare Ausgabe für Microsoft Win32-Befehlszeilenanwendungen, wie z. B. das Dienstprogramm osql, zurückzugeben. SET SHOWPLAN_ALL gibt eine detailliertere Ausgabe zurück, die in Programmen verwendet werden kann, die diese Ausgabe verarbeiten.

SET SHOWPLAN_TEXT und SET SHOWPLAN_ALL können in gespeicherten Prozeduren nicht angegeben werden. Sie müssen die einzigen Anweisungen in einem Batch sein.

SET SHOWPLAN_TEXT gibt ein Rowset in Form einer hierarchischen Struktur zurück, die die vom SQL Server-Abfrageprozessor beim Ausführen einer Anweisung durchgeführten Schritte darstellt. Jede in der Ausgabe widergespiegelte Anweisung enthält zuerst eine Zeile mit dem Text der Anweisung, auf die mehrere Zeilen mit den Details der Ausführungsschritte folgen. In der Tabelle wird die in der Ausgabe enthaltene Spalte dargestellt.

Spaltenname

Beschreibung

StmtText

Für Zeilen, die nicht vom Typ PLAN_ROW sind, enthält diese Spalte den Text der Transact-SQL-Anweisung. Für Zeilen vom Typ PLAN_ROW enthält diese Spalte eine Beschreibung des Vorgangs. Diese Spalte enthält den physischen Operator und optional auch den logischen Operator. Auf die Spalte kann auch eine Beschreibung folgen, die vom physischen Operator bestimmt wird. Weitere Informationen zu physischen Operatoren finden Sie in der Argument-Spalte von SET SHOWPLAN_ALL (Transact-SQL).

Weitere Informationen zu den physischen und logischen Operatoren, die in der Showplanausgabe angezeigt werden, finden Sie unter Logische und physikalische Operatoren (Referenz).

Berechtigungen

Für die Verwendung von SET SHOWPLAN_TEXT benötigen Sie für die Ausführung der Anweisungen, auf die SET SHOWPLAN_TEXT angewendet wird, ausreichende Berechtigungen sowie die SHOWPLAN-Berechtigung für alle Datenbanken mit Objekten, auf die verwiesen wird.

Damit die Anweisungen SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure und EXEC user_defined_function einen Showplan erstellen, benötigt der Benutzer Folgendes:

  • Berechtigungen für die Ausführung der Transact-SQL-Anweisungen.

  • Die SHOWPLAN-Berechtigung für alle Datenbanken mit Objekten, auf die von den Transact-SQL-Anweisungen verwiesen wird, wie z. B. Tabellen, Sichten usw.

Für alle anderen Anweisungen, wie z. B. DDL, USE database_name, SET, DECLARE, dynamische SQL-Anweisungen usw., werden nur die entsprechenden Berechtigungen für die Ausführung der Transact-SQL-Anweisungen benötigt.

Weitere Informationen finden Sie unter Showplansicherheit und SHOWPLAN-Berechtigung und Transact-SQL-Batches.

Beispiele

Im folgenden Beispiel wird gezeigt, wie SQL Server bei der Verarbeitung von Anweisungen Indizes verwendet.

In der folgenden Abfrage wird ein Index verwendet:

USE AdventureWorks;
GO
SET SHOWPLAN_TEXT ON;
GO
SELECT *
FROM Production.Product 
WHERE ProductID = 905;
GO
SET SHOWPLAN_TEXT OFF;
GO

Im Folgenden wird das Resultset aufgeführt:

StmtText                                           
---------------------------------------------------
SELECT *
FROM Production.Product 
WHERE ProductID = 905; 

StmtText                                                                                                                                                                                      
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Seek(OBJECT:([AdventureWorks].[Production].[Product].[PK_Product_ProductID]), SEEK:([AdventureWorks].[Production].[Product].[ProductID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD) 

In der folgenden Abfrage wird kein Index verwendet:

USE AdventureWorks;
GO
SET SHOWPLAN_TEXT ON;
GO
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET SHOWPLAN_TEXT OFF;
GO

Im Folgenden wird das Resultset aufgeführt:

StmtText                                                                
------------------------------------------------------------------------
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00; 

StmtText                                                                                                                                                                                                
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Scan(OBJECT:([AdventureWorks].[Production].[ProductCostHistory].[PK_ProductCostHistory_ProductCostID]), WHERE:([AdventureWorks].[Production].[ProductCostHistory].[StandardCost]<[@1]))