Here is a revised script...
CREATE PROCEDURE [dbo].[sp_who3]
@SPID INT = NULL,
@DBName VARCHAR(255) = NULL,
@running BIT = NULL,
@blocked BIT = NULL,
@eventinfo VARCHAR(100) = NULL
AS
SET NOCOUNT ON
DECLARE @iSPID int
CREATE TABLE #spwho (
SPID int NOT NULL
, Status varchar (255) NOT NULL
, Login varchar (255) NOT NULL
, HostName varchar (255) NOT NULL
, BlkBy varchar(10) NOT NULL
, DBName varchar (255) null
, Command varchar (255) NOT NULL
, CPUTime int NOT NULL
, DiskIO int NOT NULL
, LastBatch varchar (255) NOT NULL
, ProgramName varchar (255) null
, SPID2 int NOT NULL
, REQUESTID int NOT NULL
)
CREATE TABLE #dbcc (
SPID int,
EventType varchar(255),
Paramters int,
EventInfo varchar(8000)
)
INSERT #spwho
EXEC sp_who2
DECLARE buf CURSOR FAST_FORWARD FOR
SELECT SPID FROM #spwho
OPEN buf
FETCH NEXT FROM buf
INTO @iSPID
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @s_spid VARCHAR(10)
SET @s_spid = CAST(@iSPID AS varchar(10))
DECLARE @dbcctab TABLE (
EventType varchar(255),
Paramters int,
EventInfo varchar(8000)
)
INSERT @dbcctab
EXEC ('dbcc inputbuffer(' + @s_spid + ') WITH NO_INFOMSGS')
INSERT #dbcc
SELECT @iSPID, * FROM @dbcctab
DELETE FROM @dbcctab
FETCH NEXT FROM buf
INTO @iSPID
END
CLOSE buf
DEALLOCATE buf
SET NOCOUNT OFF
SELECT
s.SPID,
d.EventInfo,
s.Status,
s.Login,
s.HostName,
s.BlkBy,
s.DBName,
s.Command,
s.CPUTime,
s.DiskIO,
s.LastBatch,
s.ProgramName,
s.REQUESTID
FROM
#spwho s
LEFT JOIN #dbcc d ON
s.SPID = d.SPID
WHERE
(@SPID IS NULL OR s.SPID = @SPID)
AND (@blocked IS NULL OR (@blocked = 1 AND LTRIM(RTRIM(s.BlkBy)) != '.') OR (@blocked = 0 AND LTRIM(RTRIM(s.BlkBy)) = '.'))
AND (@running IS NULL OR (@running = 1 AND s.Status != 'sleeping') OR (@running = 0 AND s.Status = 'sleeping'))
AND (@DBName IS NULL OR s.DBName = @DBName)
AND (@eventinfo IS NULL OR d.EventInfo LIKE @eventinfo)
ORDER BY
LastBatch DESC