Delen via


SET SHOWPLAN_TEXT (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Veroorzaakt dat Microsoft SQL Server Transact-SQL statements niet uitvoert. In plaats daarvan geeft SQL Server gedetailleerde informatie terug over hoe de statements worden uitgevoerd.

Transact-SQL syntaxis-conventies

Syntaxis

  
SET SHOWPLAN_TEXT { ON | OFF }  

Opmerkingen

De instelling van SET SHOWPLAN_TEXT wordt ingesteld tijdens execute- of run-tijd en niet tijdens parsetijd.

Wanneer SET SHOWPLAN_TEXT AAN is, geeft SQL Server uitvoeringsinformatie terug voor elke Transact-SQL-instructie zonder deze uit te voeren. Nadat deze optie AAN is gezet, wordt uitvoeringsplaninformatie over alle volgende SQL Server-statements teruggegeven totdat de optie UIT is gezet. Als bijvoorbeeld een CREATE TABLE-instructie wordt uitgevoerd terwijl SET SHOWPLAN_TEXT AAN is, geeft SQL Server een foutmelding terug van een volgende SELECT-instructie met diezelfde tabel die de gebruiker informeert dat de gespecificeerde tabel niet bestaat. Daarom mislukken volgende verwijzingen naar deze tabel. Wanneer SET SHOWPLAN_TEXT UIT is, voert SQL Server statements uit zonder een rapport met uitvoeringsplaninformatie te genereren.

SET SHOWPLAN_TEXT is bedoeld om leesbare output terug te geven voor Microsoft Win32-opdrachtpromptapplicaties zoals het sqlcmd-hulpprogramma . SET SHOWPLAN_ALL geeft meer gedetailleerde output terug die bedoeld is voor gebruik met programma's die ontworpen zijn om de output te verwerken.

SET SHOWPLAN_TEXT en SET SHOWPLAN_ALL kunnen niet worden gespecificeerd in een opgeslagen procedure. Het moeten de enige statements in een batch zijn.

SET SHOWPLAN_TEXT geeft informatie terug als een set rijen die een hiërarchische boom vormen die de stappen vertegenwoordigen die de SQL Server-queryprocessor neemt terwijl deze elke instructie uitvoert. Elke instructie die in de output wordt weergegeven, bevat één enkele rij met de tekst van de instructie, gevolgd door meerdere rijen met de details van de uitvoeringsstappen. De tabel toont de kolom die de uitvoer bevat.

Kolomnaam Description
StmtText Voor rijen die niet van type PLAN_ROW zijn, bevat deze kolom de tekst van de Transact-SQL-uitspraak. Voor rijen van type PLAN_ROW bevat deze kolom een beschrijving van de bewerking. Deze kolom bevat de fysieke operator en kan optioneel ook de logische operator bevatten. Deze kolom kan ook gevolgd worden door een beschrijving die wordt bepaald door de fysieke operator. Voor meer informatie over fysieke operatoren, zie de kolom Argument in SET SHOWPLAN_ALL (Transact-SQL).

Voor meer informatie over de fysieke en logische operatoren die in de Showplan-uitvoer te zien zijn, zie Showplan Logical and Physical Operators Reference

Permissions

Om SET SHOWPLAN_TEXT te gebruiken, moet je voldoende rechten hebben om de statements uit te voeren waarop SET SHOWPLAN_TEXT wordt uitgevoerd, en je moet SHOWPLAN-toestemming hebben voor alle databases die verwezen objecten bevatten.

Voor de instructies SELECT, INSERT, UPDATE, DELETE , EXEC stored_procedure en EXEC user_defined_function moet de gebruiker om een Showplan te maken:

  • De juiste machtigingen hebben om de Transact-SQL-instructies uit te voeren.

  • ShowPLAN-machtigingen hebben voor alle databases met objecten waarnaar wordt verwezen door de Transact-SQL-instructies, zoals tabellen, weergaven, enzovoort.

Voor alle andere instructies, zoals DDL, USE database_name, SET, DECLARE, dynamische SQL, enzovoort, zijn alleen de juiste permissies nodig om de Transact-SQL statements uit te voeren.

Voorbeelden

Dit voorbeeld laat zien hoe indexen worden gebruikt door SQL Server terwijl het de statements verwerkt.

Dit is de zoekopdracht met behulp van een index:

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

Dit is de resultatenset:

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)   

Hier is de zoekopdracht die geen index gebruikt:

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

Dit is de resultatenset:

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

Zie ook

Operatoren (Transact-SQL)
SET-instructies (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)