USE [DB]
GO
/****** Object:  StoredProcedure [dbo].[SP_CHECK_SQL_QEURY_STATUS]    Script Date: 4/17/2025 1:45:32 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Wonbae Kim
-- Create date: 3/18/2022
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[SP_CHECK_SQL_QEURY_STATUS]

AS
BEGIN
SET NOCOUNT ON
 
-- Table variable to hold InputBuffer data
DECLARE @Inputbuffer TABLE
(
  EventType NVARCHAR(30) NULL,
  Parameters INT NULL,
  EventInfo NVARCHAR(4000) NULL
)
-- Table variable to hold running processes information
DECLARE @BusyProcess TABLE
(
  SPID INT,
  Status VARCHAR(100),
  Login VARCHAR(100),
  HostName VARCHAR(100),
  Client_Net_Address VARCHAR(100),
  DBName VARCHAR(100),
  Command VARCHAR(200),
  CPUTime INT,
  DiskIO BIGINT,
  LastBatch DATETIME,
  ProgramName VARCHAR(200),
  EventInfo NVARCHAR(4000), -- extra column to hold actual stored procedure or batch call text
  EventTime INT   -- time in minutes, a process is running
)
-- Insert all running processes information to table variable
INSERT  @BusyProcess ( SPID, Status, Login, HostName, Client_Net_Address, DBName, Command, CPUTime,DiskIO, LastBatch, ProgramName )
SELECT spid,r.status,loginame,hostname, c.client_net_address, (dbid),cmd,cpu,physical_io,last_batch,program_name 
FROM SYS.SYSPROCESSES r LEFT OUTER JOIN sys.dm_exec_connections c
on r.spid = c.session_id
WHERE 
1 = CASE WHEN r.Status IN ( 'RUNNABLE', 'SUSPENDED' ) THEN 1
--Transactions that are open not yet committed or rolledback
WHEN r.Status = 'SLEEPING' AND open_tran  > 0 THEN 1 
ELSE 0 END
AND cmd NOT LIKE 'BACKUP%'                                                
AND loginame IS NOT NULL

-- Cursor to add actuall Procedure or Batch statement for each process
DECLARE cur_BusyProcess Cursor
FOR SELECT  SPID
FROM    @BusyProcess
 
OPEN cur_BusyProcess 
DECLARE @SPID INT     
 
Fetch NEXT FROM cur_BusyProcess INTO @SPID
While ( @@FETCH_STATUS <> -1 )
BEGIN
 
INSERT  @Inputbuffer
EXEC ( 'DBCC INPUTBUFFER(' + @SPID + ')'

 
UPDATE  @BusyProcess
SET     EventInfo = I.EventInfo,
EventTime = DATEDIFF(MI,LastBatch,GETDATE())
FROM    @BusyProcess b
CROSS JOIN @Inputbuffer i
WHERE   B.SPID = @SPID
 
 
DELETE  FROM @Inputbuffer
 
FETCH NEXT FROM cur_BusyProcess INTO @SPID
END
CLOSE cur_BusyProcess
DEALLOCATE cur_BusyProcess
 
SELECT * FROM @BusyProcess

END

+ Recent posts