martes, 25 de octubre de 2011

Aplicar filtros al sp_who2 en SQL Server

Muchas veces usamos el sp_who2 para ver las conexiones activas y determinada información sobre esta, pero esto es comodo si los resultados son pocos, en el caso de ser muchos registros, cientos o miles esto ya no es aplicable.
Para estos casos deseariamos poder aplicar un filtro al sp_who2 pero esto lamentablemente no es posible. Lo que veremos en este ejemplo es como hacer un script, que podemos tener siempre a mano, que se encargue de aplicar los filtros.
El primer paso será crear una tabla temporal donde gaurdará los datos devueltos por el sp_who2. Como siempre primero controlo si la tabla ya existe para que no me arroje error al ejecutar.


-- ============================================= -- Create:        Andrés Aiello -- Create date: 25/10/11 -- Description: Filtrar los resultados del sp_who2 -- ============================================= -- Creo la tabla temporaria donde guardaré la salida del sp_who IF NOT OBJECT_ID('tempdb.dbo.#sp_who2') IS NULL DROP TABLE dbo.#sp_who2 CREATE TABLE #sp_who2     (SPID INT,     Status VARCHAR(1000) NULL,     Login SYSNAME NULL,     HostName SYSNAME NULL,     BlkBy SYSNAME NULL,     DBName SYSNAME NULL,     Command VARCHAR(1000) NULL,     CPUTime INT NULL,     DiskIO INT NULL,     LastBatch VARCHAR(1000) NULL,     ProgramName VARCHAR(1000) NULL,     SPID2 INT,     REQUESTID INT) GO

Una vez creada guardo en ella la salida del sp_who2


-- Inserto los valores INSERT INTO #sp_who2 EXEC sp_who2 GO


El paso siguiente es solamente hacer un select sobre dicha tabla, pero ahora aplicando filtro u orden, es decir lo mismo que haría en cualquier tabla. Por ejemplo filtrar solo las conexiones de mi usuario ordenadas por fecha.


SELECT *   FROM #sp_who2 -- Pongo el filtro que deseo  WHERE Login = 'AAIELLO' -- O el orden que deseo!!! ORDER BY LastBatch DESC GO


Por último elimino las estructuras creadas para no dejar "sucia" la base.


 -- Elimino las estructuras temporarias DROP TABLE #sp_who2 GO
 

Espero que les sirva!!! dejo a continuación el script copleto para que sea comodo de guardar.

 
-- ============================================= -- Create:        Andrés Aiello -- Create date: 25/10/11 -- Description: Filtrar los resultados del sp_who2 -- ============================================= -- Creo la tabla temporaria donde guardaré la salida del sp_who IF NOT OBJECT_ID('tempdb.dbo.#sp_who2') IS NULL DROP TABLE dbo.#sp_who2 CREATE TABLE #sp_who2     (SPID INT,     Status VARCHAR(1000) NULL,     Login SYSNAME NULL,     HostName SYSNAME NULL,     BlkBy SYSNAME NULL,     DBName SYSNAME NULL,     Command VARCHAR(1000) NULL,     CPUTime INT NULL,     DiskIO INT NULL,     LastBatch VARCHAR(1000) NULL,     ProgramName VARCHAR(1000) NULL,     SPID2 INT,     REQUESTID INT) GO -- Inserto los valores INSERT INTO #sp_who2 EXEC sp_who2 GO SELECT *   FROM #sp_who2 -- Pongo el filtro que deseo  WHERE Login <> 'sa' -- O el orden que deseo!!! ORDER BY LastBatch DESC GO -- Elimino las estructuras temporarias DROP TABLE #sp_who2 GO
 


2 comentarios: