Поделиться через


SET SHOWPLAN_TEXT (Transact-SQL)

Приводит к тому, что Microsoft SQL Server не выполняет инструкции Transact-SQL. Вместо этого SQL Server возвращает подробные сведения о ходе выполнения инструкций.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

SET SHOWPLAN_TEXT { ON | OFF }

Замечания

Установка значения параметра SET SHOWPLAN_TEXT выполняется во время выполнения или запуска, а не во время синтаксического анализа.

Если выполнена инструкция SET SHOWPLAN_TEXT ON, SQL Server возвращает сведения для каждой инструкции Transact-SQL, не выполняя ее. Когда параметру присвоено значение ON, возвращаются сведения по планам выполнения всех последующих инструкций SQL Server, пока параметру не будет снова присвоено значение OFF. Например, если инструкция CREATE TABLE будет выполнена при выполненной инструкции SET SHOWPLAN_TEXT ON, SQL Server вернет сообщение об ошибке в последующей инструкции SELECT, относящейся к той же таблице, сообщая пользователю, что указанная таблица не существует. Таким образом, последующие обращения к этой таблице вызовут ошибки. Если выполнена инструкция SET SHOWPLAN_TEXT OFF, то SQL Server выполняет инструкции, не создавая отчет с информацией по плану выполнения.

Инструкция SET SHOWPLAN_TEXT выводит данные в читаемом формате, предназначенном для приложений командной строки платформы Microsoft Win32, таких как программа osql. Инструкция SET SHOWPLAN_ALL возвращает более подробные данные, предназначенные для обработки программами, специально ориентированными на этот формат вывода.

Инструкции SET SHOWPLAN_TEXT и SET SHOWPLAN_ALL нельзя указывать в хранимой процедуре. Их можно указывать только как инструкции в пакете.

Инструкция SET SHOWPLAN_TEXT возвращает данные в виде набора строк, формирующего иерархическое дерево, которое представляет последовательность шагов, выполняемых обработчиком запросов SQL Server по ходу выполнения каждой инструкции. Каждая инструкция, отраженная в выходных данных, содержит одну строку с текстом инструкции, за которой следует несколько строк с подробностями этапов выполнения. Следующая таблица содержит описание столбцов вывода.

Имя столбца

Описание

StmtText

Для строк, имеющих отличный от PLAN_ROW тип, этот столбец содержит текст инструкции Transact-SQL. В строках типа PLAN_ROW этот столбец содержит описание операции. Этот столбец содержит физический оператор, а также может содержать и логический оператор. За этим столбцом также может следовать описание, определяемое физическим оператором. Дополнительные сведения о физических операторах см. в описании столбца Argument в разделе SET SHOWPLAN_ALL (Transact-SQL).

Дополнительные сведения о физических и логических операторах, отображаемых в выводе инструкции SET SHOWPLAN см. в разделе Справочник по логическим и физическим операторам

Разрешения

Для использования инструкции SET SHOWPLAN_TEXT требуются достаточные разрешения на выполнение инструкций, которые будут выполняться с инструкцией SET SHOWPLAN_TEXT, а также разрешение SHOWPLAN для всех баз данных, содержащих объекты, на которые ссылаются инструкции.

Чтобы инструкции SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure и EXEC user_defined_function создавали планы Showplan, пользователь должен:

  • обладать необходимыми разрешениями на выполнение инструкций Transact-SQL;

  • Обладать разрешениями SHOWPLAN для всех баз данных, содержащих объекты (например таблицы, представления и т. д.), на которые ссылаются инструкции Transact-SQL.

Для всех других инструкций, например: DDL, USE database_name, SET, DECLARE, динамического SQL и т. д. — требуются лишь соответствующие разрешения на выполнение инструкций Transact-SQL.

Дополнительные сведения см. в разделах Безопасность инструкции Showplan и Разрешение SHOWPLAN и пакеты Transact-SQL.

Примеры

Пример демонстрирует использование индексов в SQL Server при обработке инструкций.

Запрос, использующий индекс:

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

Результирующий набор:

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) 

Запрос, не использующий индекс:

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

Результирующий набор:

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