Mostrando entradas con la etiqueta SPID. Mostrar todas las entradas
Mostrando entradas con la etiqueta SPID. Mostrar todas las entradas

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...