SET SHOWPLAN_TEXT (Transact-SQL)
Faz com que o Microsoft SQL Server não execute as instruções Transact-SQL. Em lugar disso, o SQL Server retorna informações detalhadas sobre como as instruções são executadas.
Convençõ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. 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 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 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, 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 físicos e lógicos 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.
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âmico, entre outras, 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 AdventureWorks2012;
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:([AdventureWorks2012].[Production].[Product].[PK_Product_ProductID]), SEEK:([AdventureWorks2012].[Production].[Product].[ProductID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD)
Aqui está a consulta que não usa um índice:
USE AdventureWorks2012;
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:([AdventureWorks2012].[Production].[ProductCostHistory].[PK_ProductCostHistory_ProductCostID]), WHERE:([AdventureWorks2012].[Production].[ProductCostHistory].[StandardCost]<[@1]))