Category: SQL SQL Server
If you want to see which commands are running on SQL Server, run the query below:
SET NOCOUNT ON DECLARE @SPID SMALLINT ,@SQLID SMALLINT ,@SqlStatement VARCHAR(4000) IF object_id('tempdb..#tbl_sysprocesses') IS NOT NULL DROP TABLE #tbl_sysprocesses IF object_id('tempdb..#spid_cmds') IS NOT NULL DROP TABLE #spid_cmds IF object_id('tempdb..#spid') IS NOT NULL DROP TABLE #spid SELECT spid ,CAST(NULL AS VARCHAR(8000)) AS commandtext ,status ,sid ,hostname ,program_name ,cmd ,cpu ,physical_io ,blocked ,dbid ,convert(SYSNAME, rtrim(loginame)) AS loginname ,substring(convert(VARCHAR,last_batch,111) ,6 ,5 ) + ' ' + substring( convert(VARCHAR,last_batch,113) ,13 ,8 ) as 'last_batch_char' INTO #tbl_sysprocesses FROM master.dbo.sysprocesses (NOLOCK) WHERE NOT(lower(status) = 'sleeping' AND upper(cmd) IN ( 'AWAITING COMMAND' ,'MIRROR HANDLER' ,'LAZY WRITER' ,'CHECKPOINT SLEEP' ,'RA MANAGER' ) AND blocked = 0) --Show only active processes DELETE #tbl_sysprocesses WHERE lower(status) = 'sleeping' AND upper(cmd) IN ( 'AWAITING COMMAND' ,'LAZY WRITER' ,'CHECKPOINT SLEEP' ) AND blocked = 0 CREATE TABLE #spid_cmds ( SQLID INT IDENTITY ,SPID INT ,EventType VARCHAR(30) ,Parameters INT ,Command VARCHAR(8000) ) SELECT DISTINCT spid INTO #spid FROM #tbl_sysprocesses WHILE (1 = 1) BEGIN SET @SPID = NULL SELECT TOP 1 @SPID = spid FROM #spid IF (@SPID IS NULL) GOTO _NEXT INSERT INTO #spid_cmds (EventType, Parameters, Command) EXEC('DBCC INPUTBUFFER( ' + @SPID + ')') SELECT @SQLID = MAX(SQLID) FROM #spid_cmds UPDATE #spid_cmds SET spid = @SPID WHERE SQLID = @SQLID DELETE FROM #spid WHERE spid = @SPID END _NEXT: UPDATE p SET p.commandtext = s.command FROM #tbl_sysprocesses p INNER JOIN #spid_cmds s ON p.spid = s.spid SET @SqlStatement = ' SELECT SPID = spid ,CommandText ,Status = rtrim(CASE lower(status) When ''sleeping'' THEN lower(status) Else upper(status) END) ,Login = loginname ,HostName = CASE hostname When NULL THEN '' .'' When '' '' THEN '' .'' Else hostname END ,BlkBy = CASE ISNULL(blocked,0) When 0 THEN 0 Else blocked END ,DBName = case when dbid = 0 THEN NULL when dbid <> 0 THEN db_name(dbid) END ,Command = cmd ,CPUTime = cpu ,DiskIO = physical_io ,LastBatch = last_batch_char ,ProgramName = program_name FROM #tbl_sysprocesses ORDER BY CPUTime DESC ' EXEC(@SqlStatement) DROP TABLE #tbl_sysprocesses DROP TABLE #spid_cmds DROP TABLE #spid SET NOCOUNT ON