Megosztás:


SET SHOWPLAN_TEXT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Ez okozza, hogy a Microsoft SQL Server nem hajt végre Transact-SQL utasításokat. Ehelyett az SQL Server részletes információkat ad arról, hogyan hajtják végre a kijelentéseket.

Transact-SQL szintaxis konvenciók

Szemantika

  
SET SHOWPLAN_TEXT { ON | OFF }  

Megjegyzések

A SET SHOWPLAN_TEXT beállítása végrehajtási vagy futási időre van beállítva, nem parse időben.

Amikor a SET SHOWPLAN_TEXT BEKAPCSOLVA, az SQL Server minden Transact-SQL utasításhoz végrehajtási adatokat ad vissza anélkül, hogy azt futtatná. Miután ezt az opciót bekapcsolták, a végrehajtási terv adatai az összes további SQL Server utasításról visszakerülnek, amíg az opció ki nem kapcsolódik. Például, ha egy CREATE TABLE utasítást akkor futtatunk, amikor a SET SHOWPLAN_TEXT ON van, az SQL Server egy hibaüzenetet ad vissza egy későbbi SELECT utasításból, amely ugyanazzal a táblával rendelkezik, és tájékoztatja a felhasználót, hogy a megadott tábla nem létezik. Ezért a tábla későbbi hivatkozásai sikertelenek. Amikor a SET SHOWPLAN_TEXT KIKAPCSOLVA, az SQL Server utasításokat futtat anélkül, hogy jelentést generálna végrehajtási terv információval.

A SET SHOWPLAN_TEXT arra szolgál, hogy olvasható kimenetet adjon vissza Microsoft Win32 parancssor-alkalmazásokhoz, például a sqlcmd segédprogramhoz. A SET SHOWPLAN_ALL részletesebb kimenetet ad, amelyeket programokkal terveztek használni, amelyek a kimenet kezelésére terveztek.

A SET SHOWPLAN_TEXT és a SET SHOWPLAN_ALL nem lehet megadni egy tárolt eljárásban. Biztosan csak ezek a kijelentések egy adagban.

A SET SHOWPLAN_TEXT az adatokat sorokból álló halmazként adja vissza, amelyek hierarchikus fát alkotnak, és az SQL Server lekérdezésfeldolgozó által végrehajtott lépéseket jelképezik, amikor végrehajtja az egyes utasításokat. Minden kimenetben megjelenő utasítás egyetlen sort tartalmaz az utasítás szövegével, majd több sort követ a végrehajtási lépések részleteivel. A táblázat azt az oszlopot mutatja, amelyet a kimenet tartalmaz.

Oszlop név Description
StmtText Azokra a sorokra, amelyek nem PLAN_ROW típusúak, ez az oszlop tartalmazza a Transact-SQL állítás szövegét. Az PLAN_ROW típusú sorok esetében ez az oszlop tartalmazza a művelet leírását. Ez az oszlop tartalmazza a fizikai operátort, és opcionálisan tartalmazhatja a logikai operátort is. Ezt az oszlopot egy leírás is követheti, amelyet a fizikai operátor határoz meg. További információért a fizikai operátorokról lásd a SET SHOWPLAN_ALL (Transact-SQL ) argumentum oszlopát.

További információért a Showplan kimenetben látható fizikai és logikai operátorokról lásd: Showplan logikai és fizikai operátorok hivatkozása

Permissions

Ahhoz, hogy a SET SHOWPLAN_TEXT-t használhasd, elegendő jogosultsággal kell rendelkezned ahhoz, hogy végrehajtsd azokat az utasításokat, amelyeken a SET SHOWPLAN_TEXT végrehajtódik, és SHOWPLAN engedélyt kell szerezned minden hivatkozási objektumot tartalmazó adatbázishoz.

A SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure és EXEC user_defined_function utasításokhoz a Showplan elkészítéséhez a felhasználónak:

  • Rendelkezik a megfelelő engedélyekkel a Transact-SQL utasítások végrehajtásához.

  • RENDELKEZik SHOWPLAN-engedéllyel minden olyan adatbázisra, amely a Transact-SQL utasítások által hivatkozott objektumokat tartalmaz, például táblákat, nézeteket stb.

Minden más utasításnál, mint például a DDL, USE database_name, SET, DECLARE, dinamikus SQL és így tovább, csak a megfelelő jogosultságokra van szükség a Transact-SQL utasítások végrehajtásához.

Példák

Ez a példa bemutatja, hogyan használja az SQL Server az indexeket az utasítások feldolgozása során.

Ez a lekérdezés egy indexen keresztül:

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

Az eredményhalmaz a következő:

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)   

Íme a lekérdezés, amely nem használ indexet:

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

Az eredményhalmaz a következő:

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

Lásd még:

Operátorok (Transact-SQL)
SET-utasítások (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)