SET SHOWPLAN_TEXT (Transact-SQL)

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

Ícone de vínculo de tópicoConvenções de sintaxe 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 STATISTICS 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 sã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. Assim, as referências subsequentes a essa tabela falharão. 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 osql. 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 da 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, opcionalmente, pode ainda conter 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, consulte a coluna Argumento em SET SHOWPLAN_ALL (Transact-SQL).

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

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.

Com relação às instruções SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure, e EXEC user_defined_function, para produzir um plano de execução, o usuário deve:

  • 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âmica, entre outras, apenas as permissões adequadas para executar as instruções Transact-SQL são necessárias.

Para obter mais informações, consulte Segurança de plano de execução e Permissão SHOWPLAN e lotes 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 AdventureWorks2008R2;
GO
SET SHOWPLAN_TEXT ON;
GO
SELECT *
FROM Production.Product 
WHERE ProductID = 905;
GO
SET SHOWPLAN_TEXT OFF;
GO

Aqui está o conjunto de resultados:

StmtText                                           
---------------------------------------------------
SELECT *
FROM Production.Product 
WHERE ProductID = 905; 

StmtText                                                                                                                                                                                      
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Seek(OBJECT:([AdventureWorks2008R2].[Production].[Product].[PK_Product_ProductID]), SEEK:([AdventureWorks2008R2].[Production].[Product].[ProductID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD) 

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

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

Aqui está o conjunto de resultados:

StmtText                                                                
------------------------------------------------------------------------
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00; 

StmtText                                                                                                                                                                                                
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Scan(OBJECT:([AdventureWorks2008R2].[Production].[ProductCostHistory].[PK_ProductCostHistory_ProductCostID]), WHERE:([AdventureWorks2008R2].[Production].[ProductCostHistory].[StandardCost]<[@1]))