Partager via


SET SHOWPLAN_TEXT (Transact-SQL)

Empêche Microsoft SQL Server d'exécuter les instructions Transact-SQL. Au lieu de cela, SQL Server retourne des informations détaillées sur l'exécution des instructions.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

SET SHOWPLAN_TEXT { ON | OFF }

Notes

La définition de SET SHOWPLAN_TEXT s'effectue au moment de l'exécution, et non pas durant l'analyse.

Si SET SHOWPLAN_TEXT est activé (ON), SQL Server retourne des informations sur l'exécution de chaque instruction Transact-SQL, sans toutefois l'exécuter. Une fois cette option activée, des informations sur le plan d'exécution de toutes les instructions SQL Server suivantes sont retournées jusqu'à sa désactivation (OFF). Si, par exemple, une instruction CREATE TABLE est exécutée alors que l'option SET SHOWPLAN_TEXT est activée, SQL Server retourne un message d'erreur d'une instruction SELECT ultérieure se rapportant à cette même table, lequel informe l'utilisateur qu'elle n'existe pas. Par conséquent, les références suivantes à cette table échoueront. Lorsque l'option SET SHOWPLAN_TEXT est désactivée, SQL Server exécute les instructions sans créer de rapport contenant des informations sur le plan d'exécution.

L'option SET SHOWPLAN_TEXT est conçue pour retourner des résultats pouvant être interprétés par des applications d'invite de commandes Microsoft Win32, par exemple l'utilitaire osql. SET SHOWPLAN_ALL retourne des résultats plus détaillés, destinés à être utilisés par des programmes capables de gérer sa sortie.

SET SHOWPLAN_TEXT et SET SHOWPLAN_ALL ne peuvent pas être spécifiés dans une procédure stockée. Elles doivent être les seules instructions d'un traitement.

SET SHOWPLAN_TEXT retourne les informations sous la forme d'un ensemble de lignes formant une arborescence hiérarchique, qui représente les étapes effectuées par le processeur de requêtes SQL Server à mesure qu'il exécute chaque instruction. Chaque instruction reflétée dans la sortie contient une ligne unique comportant le texte de l'instruction, suivie de plusieurs lignes contenant les détails des étapes d'exécution. Le tableau suivant montre la colonne figurant dans la sortie.

Nom de colonne

Description

StmtText

Pour les lignes qui ne sont pas du type PLAN_ROW, cette colonne contient le texte de l'instruction Transact-SQL. Pour les lignes de type PLAN_ROW, cette colonne contient une description de l'opération. Cette colonne contient l'opérateur physique et peut éventuellement comprendre l'opérateur logique. Elle peut également être suivie d'une description qui est déterminée par l'opérateur physique. Pour plus d'informations sur les opérateurs physiques, consultez la colonne Argument dans SET SHOWPLAN_ALL (Transact-SQL).

Pour plus d'informations sur les opérateurs physiques et logiques affichés dans des résultats de plan de requêtes, Référence des opérateurs physiques et logiques.

Autorisations

Pour utiliser SET SHOWPLAN_TEXT, vous devez disposer des autorisations requises pour exécuter les instructions sur lesquelles porte SET SHOWPLAN_TEXT et vous devez avoir l'autorisation SHOWPLAN pour toutes les bases de données qui contiennent les objets référencés.

Concernant les instructions SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure et EXEC user_defined_function, pour produire un plan d'exécution (Showplan), l'utilisateur doit :

  • Posséder les autorisations appropriées pour exécuter les instructions Transact-SQL.

  • Disposer de l'autorisation SHOWPLAN sur toutes les bases de données contenant les objets référencés par les instructions Transact-SQL, par exemple des tables, des vues, etc.

Pour toutes les autres instructions, telles que DDL, USE database_name, SET, DECLARE, dynamic SQL, etc., seules les autorisations appropriées pour exécuter les instructions Transact-SQL sont nécessaires.

Pour plus d'informations, consultez Sécurité Showplan et Autorisation SHOWPLAN et traitements Transact-SQL.

Exemples

Cet exemple montre comment SQL Server utilise les index durant le traitement d'une instruction.

Requête utilisant un index :

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

Ensemble de résultats obtenu :

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) 

Requête n'utilisant pas d'index :

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

Ensemble de résultats obtenu :

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]))