SET SHOWPLAN_TEXT (Transact-SQL)
Impedisce l'esecuzione delle istruzioni Transact-SQL in Microsoft SQL Server. SQL Server restituisce invece informazioni dettagliate sulla modalità di esecuzione delle istruzioni.
Convenzioni della sintassi Transact-SQL
Sintassi
SET SHOWPLAN_TEXT { ON | OFF }
Osservazioni
L'opzione SET SHOWPLAN_TEXT viene impostata in fase di esecuzione, non in fase di analisi.
Quando l'opzione SET SHOWPLAN_TEXT è impostata su ON, SQL Server restituisce informazioni di esecuzione per ogni istruzione Transact-SQL senza eseguire l'istruzione. Quando l'opzione è impostata su ON, vengono restituite informazioni del piano di esecuzione su tutte le istruzioni SQL Server successive fino a quando l'opzione non viene reimpostata su OFF. Se, ad esempio, si esegue un'istruzione CREATE TABLE quando l'opzione SET SHOWPLAN_TEXT è impostata su ON, SQL Server restituisce un messaggio di errore di una successiva istruzione SELECT che interessa la stessa tabella, per informare gli utenti che la tabella specificata non esiste. I successivi riferimenti a tale tabella pertanto hanno esito negativo. Quando l'opzione SET SHOWPLAN_TEXT è impostata su OFF, le istruzioni vengono eseguite da SQL Server senza la generazione di un report contenente informazioni del piano di esecuzione.
SET SHOWPLAN_TEXT è stata creata specificatamente per la restituzione di output leggibile in applicazioni della riga di comando per Microsoft Win 32, ad esempio l'utilità osql. L'opzione SET SHOWPLAN_ALL restituisce un output più dettagliato per l'utilizzo in programmi per la gestione di output.
Non è possibile specificare SET SHOWPLAN_TEXT e SET SHOWPLAN_ALLL all'interno di una stored procedure. Devono essere le uniche istruzioni in un batch.
L'opzione SET SHOWPLAN_TEXT restituisce informazioni sotto forma di un set di righe in un albero gerarchico che rappresenta i passaggi eseguiti da Query Processor di SQL Server per l'esecuzione delle varie istruzioni. Ogni istruzione restituita nell'output include una singola riga contenente il testo dell'istruzione seguita da alcune righe che includono i dettagli dei passaggi dell'esecuzione. Nella tabella seguente vengono illustrate le colonne incluse nell'output.
Nome colonna |
Descrizione |
---|---|
StmtText |
Per righe che non sono di tipo PLAN_ROW, questa colonna include il testo dell'istruzione Transact-SQL. Per righe di tipo PLAN_ROW, include una descrizione dell'operazione. La colonna include l'operatore fisico e facoltativamente l'operatore logico. Può essere inoltre seguita da una descrizione determinata dall'operatore fisico. Per ulteriori informazioni sugli operatori fisici, vedere la colonna Argument in SET SHOWPLAN_ALL (Transact-SQL). |
Per ulteriori informazioni sugli operatori fisici e logici che possono essere visualizzati nell'output Showplan, vedere Guida di riferimento a operatori Showplan logici e fisici
Autorizzazioni
Per poter utilizzare SET SHOWPLAN_TEXT, è necessario disporre delle autorizzazioni sufficienti per eseguire le istruzioni in cui SET SHOWPLAN_TEXT viene eseguito, nonché l'autorizzazione SHOWPLAN per tutti i database contenenti oggetti di riferimento.
Per poter generare uno Showplan con le istruzioni SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure e EXEC user_defined_function, l'utente deve disporre di:
Autorizzazioni appropriate per l'esecuzione delle istruzioni Transact-SQL.
Autorizzazione SHOWPLAN su tutti i database contenenti oggetti a cui fanno riferimento le istruzioni Transact-SQL, ad esempio tabelle, viste e così via.
Per tutte le altre istruzioni, ad esempio DDL, USE database_name, SET, DECLARE, SQL dinamico, e così via, sono necessarie soltanto le autorizzazioni appropriate per eseguire le istruzioni Transact-SQL.
Esempi
In questo esempio viene illustrato l'utilizzo degli indici in SQL Server durante l'elaborazione di istruzioni.
Questa query utilizza un indice:
USE AdventureWorks2012;
GO
SET SHOWPLAN_TEXT ON;
GO
SELECT *
FROM Production.Product
WHERE ProductID = 905;
GO
SET SHOWPLAN_TEXT OFF;
GO
Set di risultati:
StmtText
---------------------------------------------------
SELECT *
FROM Production.Product
WHERE ProductID = 905;
StmtText
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Seek(OBJECT:([AdventureWorks2012].[Production].[Product].[PK_Product_ProductID]), SEEK:([AdventureWorks2012].[Production].[Product].[ProductID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD)
Questa query non utilizza un indice:
USE AdventureWorks2012;
GO
SET SHOWPLAN_TEXT ON;
GO
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET SHOWPLAN_TEXT OFF;
GO
Set di risultati:
StmtText
------------------------------------------------------------------------
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
StmtText
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Scan(OBJECT:([AdventureWorks2012].[Production].[ProductCostHistory].[PK_ProductCostHistory_ProductCostID]), WHERE:([AdventureWorks2012].[Production].[ProductCostHistory].[StandardCost]<[@1]))