Encontrar la última sentencia ejecutada para un SPID determinado

Posted on
  • domingo, 23 de noviembre de 2008
  • by
  • Román
  • in
  • Etiquetas: ,
  • 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

    0 comentarios:

    Publicar un comentario