Compartilhar via


SET SHOWPLAN_TEXT (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Faz com que o Microsoft SQL Server não execute instruções Transact-SQL. Em vez disso, o SQL Server retorna informações detalhadas sobre como as instruções são executadas.

Convenções de sintaxe de Transact-SQL

Sintaxe

  
SET SHOWPLAN_TEXT { ON | OFF }  

Comentários

A configuração de SHOWPLAN_TEXT é definida durante a execução ou tempo de execução, e não no momento da análise.

Quando SET SHOWPLAN_TEXT estiver ON (acionado), o SQL Server retorna informações de execução para cada instrução Transact-SQL, sem executá-las. Depois que essa opção estiver definida como ON, as informações do plano de execução sobre todas as instruções SQL Server subsequentes serão retornadas, até que a opção esteja definida como OFF. Por exemplo, se uma instrução CREATE TABLE for executada enquanto SET SHOWPLAN_TEXT estiver como ON, o SQL Server retorna uma mensagem de erro de uma instrução SELECT subsequente envolvendo essa mesma tabela, informando ao usuário que a tabela especificada não existe. Portanto, haverá falha nas referências subsequentes para essa tabela. Quando SET SHOWPLAN_TEXT for OFF, o SQL Server executa instruções sem gerar um relatório com informações do plano de execução.

SET SHOWPLAN_TEXT tem como objetivo retornar uma saída legível para aplicativos de prompt de comando do Microsoft Win32, como o utilitário sqlcmd. SET SHOWPLAN_ALL retorna uma saída mais detalhada, que deve ser usada com programas projetados para manipulá-la.

SET SHOWPLAN_TEXT e SET SHOWPLAN_ALL não devem ser especificados em um procedimento armazenado. Elas devem ser as únicas instruções em um lote.

SET SHOWPLAN_TEXT retorna informações como um conjunto de linhas que formam uma árvore hierárquica que representa as etapas cumpridas pelo processador de consultas do SQL Server, à medida que ele executa cada instrução. Cada instrução refletida na saída contém uma única linha com o texto da instrução, seguida de várias linhas com os detalhes das etapas de execução. A tabela exibe a coluna contida na saída.

Nome da coluna Descrição
StmtText Para linhas que não são do tipo PLAN_ROW, essa coluna conterá o texto da instrução Transact-SQL. Para linhas do tipo PLAN_ROW, essa coluna contém uma descrição da operação. Essa coluna contém o operador físico e pode também conter, opcionalmente, o operador lógico. Essa coluna também pode ser seguida de uma descrição, determinada pelo operador físico. Para obter mais informações sobre operadores físicos, veja a coluna Argument em SET SHOWPLAN_ALL (Transact-SQL).

Para obter mais informações sobre os operadores lógicos e físicos que podem ser vistos na saída do plano de execução, veja Referência de operadores lógicos e físicos do de plano de execução

Permissões

Para usar SET SHOWPLAN_TEXT, é preciso ter as permissões necessárias para executar as instruções nas quais SET SHOWPLAN_TEXT será executado e, ainda, é preciso ter permissão SHOWPLAN para todos os bancos de dados que contenham objetos referenciados.

Para instruções SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure e EXEC user_defined_function, para produzir um Plano de Execução, o usuário precisa:

  • Ter as permissões apropriadas para executar as instruções Transact-SQL.

  • Ter permissão SHOWPLAN em todos os bancos de dados que contenham objetos referenciados pelas instruções Transact-SQL, como tabelas, exibições e assim por diante.

Para todas as outras instruções, como DDL, USE database_name, SET, DECLARE, SQL dinâmico, e assim por diante, são necessárias apenas as permissões adequadas para executar as instruções Transact-SQL.

Exemplos

Este exemplo mostra como índices são usados pelo SQL Server, na medida em que ele processa as instruções.

Esta é a consulta que usa um índice:

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

Este é o conjunto de resultados:

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)   

Aqui está a consulta que não usa um índice:

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

Este é o conjunto de resultados:

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

Consulte Também

Operadores (Transact-SQL)
Instruções SET (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)