sys.fn_get_sql (Transact-SQL)

Se aplica a:SQL Server

Devuelve el texto de la instrucción SQL para el identificador SQL especificado.

Importante

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Use sys.dm_exec_sql_text en su lugar. Para obtener más información, consulte sys.dm_exec_sql_text (Transact-SQL).

Convenciones de sintaxis de Transact-SQL

Sintaxis

  
sys.fn_get_sql ( SqlHandle )  

Argumentos

SqlHandle
Es el valor del identificador. SqlHandle es varbinary(64) sin ningún valor predeterminado.

Tablas devueltas

Nombre de la columna Tipo de datos Descripción
dbid smallint Id. de la base de datos. En el caso de instrucciones SQL ad hoc y preparadas, identificador de la base de datos en que se compilaron las instrucciones.
objectid int Identificador del objeto de base de datos. Este valor es NULL para las instrucciones SQL ad hoc.
number smallint Indica el número del grupo, si se agrupan los procedimientos.

0 = Las no son procedimientos.

NULL = Instrucciones SQL ad hoc.
encrypted bit Indica si el objeto está cifrado.

0 = No cifrado

1 = Cifrada
texto text Texto de la instrucción SQL. Este valor es NULL para objetos cifrados.

Comentarios

Puede obtener un identificador SQL válido de la columna sql_handle de la vista de administración dinámica de sys.dm_exec_requests (Transact-SQL).

Si pasa un identificador que ya no existe en la memoria caché, fn_get_sql devuelve un conjunto de resultados vacío. Si pasa un identificador no válido, el archivo por lotes se detiene y aparece un mensaje de error.

El motor de base de datos de SQL Server no puede almacenar en caché algunas instrucciones Transact-SQL, como instrucciones de copia masiva e instrucciones con literales de cadena mayores de 8 KB. No se pueden recuperar identificadores de esas instrucciones utilizando la función fn_get_sql.

La columna de texto del conjunto de resultados se filtra para el texto que puede contener contraseñas. Para obtener más información sobre los procedimientos almacenados relacionados con la seguridad que no están supervisados, vea Filtrar un seguimiento.

La función fn_get_sql devuelve información similar al comando DBCC INPUTBUFFER . Los siguientes son ejemplos de situaciones en las que se puede utilizar la función fn_get_sql cuando no se puede utilizar DBCC INPUTBUFFER:

  • Cuando los eventos tengan más de 255 caracteres.

  • Cuando tenga que devolver el nivel más alto de anidamiento de un procedimiento almacenado. Por ejemplo, hay dos procedimientos almacenados denominados sp_1 y sp_2. Si sp_1 llama a sp_2 y el identificador se obtiene de la vista de administración dinámica sys.dm_exec_requests mientras se ejecuta sp_2, la función fn_get_sql devuelve información sobre sp_2. Además, la función fn_get_sql devuelve el texto completo del procedimiento almacenado en el nivel más alto de anidamiento.

Permisos

El usuario necesita tener el permiso VIEW SERVER STATE en el servidor.

Ejemplos

Los administradores de base de datos pueden utilizar la función fn_get_sql, como se muestra en el ejemplo siguiente, para facilitar el diagnóstico de procesos problemáticos. Una vez que un administrador identifica el identificador de sesión problemático, puede recuperar el identificador SQL de esa sesión, llamar a la función fn_get_sql con él y luego utilizar los desplazamientos inicial y final para determinar el texto del identificador de sesión SQL problemático.

DECLARE @Handle varbinary(64);  
SELECT @Handle = sql_handle   
FROM sys.dm_exec_requests   
WHERE session_id = 52 and request_id = 0;  
SELECT * FROM sys.fn_get_sql(@Handle);  
GO  

Consulte también

DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)