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


SET SHOWPLAN_TEXT (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Приводит к тому, что 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, не выполняя ее. После установки этого параметра сведения о плане выполнения всех последующих инструкций SQL Server возвращаются, пока не будет задан параметр OFF. Например, если инструкция CREATE TABLE выполняется в режиме SET SHOWPLAN_TEXT имеет значение ON, SQL Server возвращает сообщение об ошибке из последующей инструкции SELECT, включающей ту же таблицу, информирующую пользователя о том, что указанная таблица не существует. Следовательно, последующие ссылки на эту таблицу не действуют. Если параметр SET SHOWPLAN_TEXT отключен, SQL Server выполняет инструкции без создания отчета с сведениями о плане выполнения.

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

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

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

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

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

Примеры

В этом примере показано, как индексы используются SQL Server при обработке инструкций.

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

USE AdventureWorks2022;  
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:([AdventureWorks2022].[Production].[Product].[PK_Product_ProductID]), SEEK:([AdventureWorks2022].[Production].[Product].[ProductID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD)   

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

USE AdventureWorks2022;  
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:([AdventureWorks2022].[Production].[ProductCostHistory].[PK_ProductCostHistory_ProductCostID]), WHERE:([AdventureWorks2022].[Production].[ProductCostHistory].[StandardCost]<[@1]))  

См. также

Операторы (Transact-SQL)
Инструкции SET (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)