fn_get_sql (Transact-SQL)

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

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

ms189451.note(es-es,SQL.90).gifImportante:
Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizarla en un nuevo trabajo de desarrollo y piense en modificar las aplicaciones que actualmente utilicen esta característica. En su lugar, utilice sys.dm_exec_sql_text. Para obtener más información, vea sys.dm_exec_sql_text.

Sintaxis

fn_get_sql ( SqlHandle )

Argumentos

SqlHandle

Valor del identificador. SqlHandle es de tipo varbinary(64) y no tiene un valor predeterminado.

Tablas devueltas

Nombre de columna Tipo de datos Descripción

dbid

smallint

Id. de base de datos. Este valor es NULL para las instrucciones SQL ad hoc.

objectid

int

Id. 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 entradas no son procedimientos.

NULL = Instrucciones SQL ad hoc.

encrypted

bit

Indica si el objeto está cifrado.

0 = No cifrado

1 = Cifrado

text

text

Texto de la instrucción SQL. Este valor es NULL para objetos cifrados.

Notas

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

Si pasa un identificador que ya no existe en la 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.

Microsoft SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) 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 puede recuperar identificadores de esas instrucciones utilizando la función fn_get_sql.

La columna text del conjunto de resultados se filtra por texto que puede contener contraseñas. Para obtener más información sobre los procedimientos almacenados relacionados con la seguridad que no se supervisan, vea Filtrar una traza.

La información devuelta por la función fn_get_sql es similar a la del 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 session_id problemático, puede recuperar el identificador SQL de ese session_id, llamar a la función fn_get_sql con el identificador y luego utilizar los desplazamientos inicial y final para determinar el texto de SQL del session_id 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 ::fn_get_sql(@Handle);
GO

Vea también

Referencia

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

Ayuda e información

Obtener ayuda sobre SQL Server 2005