Thursday, November 15, 2012

Effecient way to use sp_who2 active

/*The one thing you miss while running sp_who2 is the whole sql command snapshot  based on database input.
Below script will enable you to do this.
--  exec usp_show_sp_who2info <database > */
USE [master]
GO
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE PROCEDURE [dbo].[usp_show_sp_who2info]
@dbname varchar(50) 
AS
DECLARE @strSQL varchar(255)
DECLARE @spid varchar(10)
DECLARE @dbname2 varchar(40)
CREATE table #tmpUsers(spid int,status varchar(30),login varchar(50),hostname varchar(50),blk varchar(50),dbname varchar(50) null,cmd varchar(30),cputime int,diskio int,lastbatch varchar(50),programname varchar(100),spid1 int,request_id int)
INSERT INTO #tmpUsers EXEC SP_WHO2 active
delete from #tmpUsers where dbname is null
DECLARE READ_ONLY FOR LoginCursor CURSOR
SELECT spid, dbname FROM #tmpUsers WHERE dbname = @dbname
OPEN LoginCursor
FETCH NEXT FROM LoginCursor INTO @spid, @dbname2
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
SET @strSQL = 'dbcc inputbuffer( ' + @spid + ')'
EXEC (@strSQL)
END
FETCH NEXT FROM LoginCursor INTO @spid, @dbname2
END
CLOSE LoginCursor
DEALLOCATE LoginCursor
DROP TABLE table #tmpUsers

No comments:

Post a Comment