SET SHOWPLAN_TEXT (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Způsobuje, že Microsoft SQL Server nevykonává Transact-SQL příkazy. Místo toho SQL Server vrací podrobné informace o tom, jak jsou příkazy vykonávány.

Transact-SQL konvence syntaxe

Syntaxe

  
SET SHOWPLAN_TEXT { ON | OFF }  

Poznámky

Nastavení je SET SHOWPLAN_TEXT nastaveno při spuštění nebo běhu a ne při parse.

Když SET SHOWPLAN_TEXT je ZAPNUTO, SQL Server vrací informace o provádění pro každý Transact-SQL příkaz bez jeho vykonání. Po zapnutí této možnosti se vrací informace o plánu provádění všech následujících příkazů SQL Serveru, dokud není možnost vypnuta. Například pokud CREATE TABLE je příkaz vykonán během SETSET SHOWPLAN_TEXT ZAPNUTÉHO, SQL Server vrátí chybovou zprávu z následného příkazu SELECT zahrnující stejnou tabulku, která uživatele informuje, že daná tabulka neexistuje. Následné odkazy na tuto tabulku proto selžou. Když SET SHOWPLAN_TEXT je VYPNUTO, SQL Server vykonává příkazy bez generování reportu s informacemi o plánu vykonání.

SET SHOWPLAN_TEXTje určen k vrácení čitelného výstupu pro příkazové řádky Microsoft Win32, jako je utilita sqlcmd. SET SHOWPLAN_ALL vrací podrobnější výstup určený pro použití s programy navrženými pro zpracování jeho výstupu.

SET SET SHOWPLAN_TEXT a SETSET SHOWPLAN_ALL nelze specifikovat v uložené procedurě. Musí to být jediné výpisy v dávce.

SET SHOWPLAN_TEXTvrací informace jako sadu řádků, které tvoří hierarchický strom reprezentující kroky, které provádí procesor dotazů SQL Server při provádění každého příkazu. Každý příkaz zobrazený ve výstupu obsahuje jeden řádek s textem příkazu, následovaný několika řádky s detaily výkonných kroků. Tabulka ukazuje sloupec, který výstup obsahuje.

Název sloupce Description
StmtText Pro řádky, které nejsou typu PLAN_ROW, tento sloupec obsahuje text Transact-SQL příkazu. Pro řádky typu PLAN_ROW tento sloupec obsahuje popis operace. Tento sloupec obsahuje fyzický operátor a může volitelně obsahovat i logický operátor. Tento sloupec může být také následován popisem, který určuje fyzický operátor. Pro více informací o fyzikálních operátorech viz sloupec Argument v SET SHOWPLAN_ALL (Transact-SQL).

Pro více informací o fyzických a logických operátorech, které lze vidět ve výstupu Showplan, viz Showplan Logické a fyzikální operátory Reference

Povolení

Pro použití SETSET SHOWPLAN_TEXTmusíte mít dostatečná oprávnění k provádění příkazů, na kterých SETSET SHOWPLAN_TEXT se vykonává, a musíte mít SHOWPLAN oprávnění pro všechny databáze obsahující odkazované objekty.

Pro příkazy SELECT, INSERT, UPDATE, DELETEstored_procedure EXEC a EXEC user_defined_function, aby uživatel vytvořil Showplan, musí:

  • Mít příslušná oprávnění ke spuštění příkazů Transact-SQL.

  • Mít oprávnění SHOWPLAN pro všechny databáze obsahující objekty odkazované příkazy Transact-SQL, jako jsou tabulky, zobrazení atd.

Pro všechny ostatní příkazy, jako DDL, USE database_name, SET, DECLARE, dynamic SQL a podobně, jsou potřeba pouze příslušná oprávnění k vykonání Transact-SQL příkazů.

Examples

Tento příklad ukazuje, jak SQL Server používá indexy při zpracování příkazů.

Toto je dotaz pomocí indexu:

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

Tady je sada výsledků:

StmtText                                             
---------------------------------------------------  
SELECT *  
FROM Production.Product   
WHERE ProductID = 905;   
  
StmtText                                                                                                                                                                                        
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
|--Clustered Index Seek(OBJECT:([AdventureWorks2022].[Production].[Product].[PK_Product_ProductID]), SEEK:([AdventureWorks2022].[Production].[Product].[ProductID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD)   

Zde je dotaz bez indexu:

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

Tady je sada výsledků:

StmtText                                                                  
------------------------------------------------------------------------  
SELECT *  
FROM Production.ProductCostHistory  
WHERE StandardCost < 500.00;   
  
StmtText                                                                                                                                                                                                  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
|--Clustered Index Scan(OBJECT:([AdventureWorks2022].[Production].[ProductCostHistory].[PK_ProductCostHistory_ProductCostID]), WHERE:([AdventureWorks2022].[Production].[ProductCostHistory].[StandardCost]<[@1]))  

Viz také

Operátory (Transact-SQL)
SET Příkazy (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)