Compartir vía


SET SHOWPLAN_TEXT (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Hace que Microsoft SQL Server no ejecute instrucciones Transact-SQL. En su lugar, SQL Server devuelve información detallada sobre el modo en que se ejecutan las instrucciones.

Convenciones de sintaxis de Transact-SQL

Sintaxis

  
SET SHOWPLAN_TEXT { ON | OFF }  

Comentarios

La opción SET SHOWPLAN_TEXT se establece en tiempo de ejecución, no en tiempo de análisis.

Cuando SET SHOWPLAN_TEXT es ON, SQL Server devuelve información acerca de la ejecución de cada instrucción Transact-SQL, sin ejecutarla. Cuando esta opción está establecida en ON, se devuelve información acerca del plan de ejecución de todas las instrucciones SQL Server siguientes hasta que se vuelve a establecer en OFF. Por ejemplo, si se ejecuta una instrucción CREATE TABLE cuando SET SHOWPLAN_TEXT es ON y después se ejecuta una instrucción SELECT en la que se especifica la tabla creada, SQL Server devuelve un mensaje de error en el que se indica que la tabla especificada no existe. Por ello, las referencias posteriores que se hagan a la tabla generarán un error. Cuando SET SHOWPLAN_TEXT está establecida en OFF, SQL Server ejecuta las instrucciones sin generar ningún informe con información del plan de ejecución.

SET SHOWPLAN_TEXT permite devolver una salida legible para las aplicaciones de símbolo del sistema de Microsoft Win32, como la utilidad sqlcmd. SET SHOWPLAN_ALL devuelve información más detallada, destinada a los programas diseñados para tratarla.

SET SHOWPLAN_TEXT y SET SHOWPLAN_ALL no se pueden especificar en un procedimiento almacenado. Deben ser las únicas instrucciones de un lote.

SET SHOWPLAN_TEXT devuelve la información como un conjunto de filas en forma de árbol jerárquico que representa los pasos que sigue el procesador de consultas de SQL Server al ejecutar cada instrucción. Cada instrucción reflejada en la salida contiene una fila con el texto de la instrucción, seguida de varias filas con los detalles de los pasos de su ejecución. La tabla muestra la columna que contiene la salida.

Nombre de la columna Descripción
StmtText En las filas que no sean de tipo PLAN_ROW, esta columna contiene el texto de la instrucción Transact-SQL. En las filas de tipo PLAN_ROW, esta columna contiene una descripción de la operación. Esta columna contiene el operador físico y, opcionalmente, puede contener también el operador lógico. También puede ir seguida de una descripción determinada por el operador físico. Para obtener más información acerca de los operadores físicos, vea la columna Argument de SET SHOWPLAN_ALL (Transact-SQL).

Para obtener más información acerca de los operadores físicos y lógicos que se pueden mostrar en la salida del plan de presentación, vea Referencia de operadores lógicos y físicos del plan de presentación.

Permisos

Para utilizar SET SHOWPLAN_TEXT, debe disponer de permisos suficientes para ejecutar las instrucciones en las que se ejecuta SET SHOWPLAN_TEXT, y debe tener el permiso SHOWPLAN para todas las bases de datos que contengan objetos a los que se hace referencia.

En el caso de las instrucciones SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure y EXEC user_defined_function, para producir un plan de presentación, el usuario debe:

  • Tener los permisos correspondientes para ejecutar las instrucciones Transact-SQL.

  • Tener el permiso SHOWPLAN en todas las bases de datos que contengan objetos a los que hacen referencia las instrucciones Transact-SQL, como tablas, vistas, etc.

Para las demás instrucciones, como DDL, USE database_name, SET, DECLARE, SQL dinámico, etc., solo son necesarios los permisos apropiados para ejecutar las instrucciones Transact-SQL.

Ejemplos

En este ejemplo se muestra la forma en que SQL Server utiliza los índices al procesar las instrucciones.

Ésta es la consulta que utiliza un índice:

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

El conjunto de resultados es:

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)   

Ésta es la consulta que no utiliza un índice:

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

El conjunto de resultados es:

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

Consulte también

Operadores (Transact-SQL)
Instrucciones SET (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)