Encontrar la última sentencia ejecutada para un SPID determinado

Existen ocasiones cuando necesitamos encontrar la última sentencia que fué enviada por un usuario a una instancia SQL Server. Hay un par de maneras de hacer esto.

Abrimos dos sessiones diferentes en Query Analizer (SQL 2000) o Management Studio (2005).

En la primera sesión ejecutamos:

select @@spid

Esto nos devuelve el SPID de proceso.

Ahora ejecutamos:

SELECT table_name, table_Type
FROM INFORMATION_SCHEMA.TABLES
WHERE table_Type = ‘BASE TABLE’
GO

Ahora nos vamos a la otra sessión y ejecutamos:

DBCC INPUTBUFFER (spid)

Obviamente reemplazamos "spid" con el valor obtenido de la consulta anterior.
Y veremos la consulta ejecutada en la otra session.

Otra forma de lograr lo mismo es usar: fn_get_sql. Esta función fué introducida recién en el Service Pack 3 de SQL Server 2000, de modo que si no tienen dicho SP no la van a encontrar disponible.

La primera opción funciona siempre en SQL Server 2000 y 2005.

He aquí como se usa la función fn_get_sql.

DECLARE @HANDLE BINARY(20)
SELECT @HANDLE = sql_handle from sys.sysprocesses where spid = 60
SELECT text FROM ::fn_get_sql(@handle)

En SQL 2005 también tenemos disponibles las DMV (dynamic management view) para obtener dicha información.

DECLARE @handle VARBINARY(64)
SELECT @handle = sql_handle from sys.sysprocesses where spid = 60
SELECT text FROM sys.dm_exec_sql_text(@handle)

Y ya está, demasiado para un día de calor en Buenos Aires.

Hugo Román Bernachea
Mail de contacto: SQLServer777@gmail.com

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea

Read More...