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)