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