Sdílet prostřednictvím


NASTAV 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í SET SHOWPLAN_TEXT je nastaveno při spuštění nebo běhu a nikoli při parse.

Když je SET SHOWPLAN_TEXT zapnuto, SQL Server vrací informace o vykoná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 je příkaz CREATE TABLE vykonán, zatímco je SET SHOWPLAN_TEXT zapnuto, 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ž je SET SHOWPLAN_TEXT vypnutý, SQL Server vykonává příkazy bez generování reportu s informacemi o plánu vykonání.

SET SHOWPLAN_TEXT je určen k vracení č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 SHOWPLAN_TEXT a SET SHOWPLAN_ALL nelze zadat v uložené procedurě. Musí to být jediné výpisy v dávce.

SET SHOWPLAN_TEXT vrací informace jako sadu řádků, které tvoří hierarchický strom reprezentující kroky, které SQL Server procesor dotazů provádí 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í SET SHOWPLAN_TEXT musíte mít dostatečná oprávnění k vykonání příkazů, na kterých se vykonává SET SHOWPLAN_TEXT, a musíte mít SHOWPLAN oprávnění pro všechny databáze obsahující odkazované objekty.

Pro příkazy SELECT, INSERT, UPDATE, DELETE , EXEC stored_procedure a EXEC user_defined_function musí uživatel vytvořit Showplan:

  • 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)
Příkazy SET (Transact-SQL)
NASTAV SHOWPLAN_ALL (Transact-SQL)