use master
go
IF OBJECTPROPERTY(OBJECT_ID('dbo.sp_who_ex'), 'IsProcedure') = 1
BEGIN
DROP PROCEDURE dbo.sp_who_ex
IF OBJECTPROPERTY(OBJECT_ID('dbo.sp_who_ex'), 'IsProcedure') = 1
PRINT '<<< FAILED DROPPING PROCEDURE dbo.sp_who_ex >>>'
ELSE
PRINT '<<< DROPPED PROCEDURE dbo.sp_who_ex >>>'
END
go
create procedure sp_who_ex (
@spid int = 0,
@dbname nvarchar(30) = N'%',
@loginame nvarchar(256) = N'%',
@hostname nvarchar(256) = N'%',
@programname nvarchar(256) = N'%',
@ntusername nvarchar(256) = N'%',
@onlyblocked bit = 0,
@orderby varchar(30) = 'spid',
@report varchar(10) = NULL
)
-- with encryption
as
/********************************************************************************/
/* Created By : Umachandar Jayachandran (UC) */
/* Created On : 20 January 1999 */
/* Description : Written to avoid using sp_who or sp_who2 sps. Those sps are */
/* not very flexible & sp_who2 hangs if tempdb itself is locked. */
/* This SP also provides more filters to use. */
/********************************************************************************/
/* Resources : https://umachandar.com/resources.htm */
/********************************************************************************/
if (@dbname <> N'%') and (db_id(@dbname) is null)
begin
raiserror ('Invalid database name specified.', 1, 2)
return(-1)
end
set @orderby = lower(coalesce(@orderby, 'spid'))
if (@orderby not in ('spid', 'cpu', 'cpu desc', 'io', 'io desc', 'host', 'program',
'ntuser', 'sqllogin', 'lastbatch desc', 'lastbatch'))
begin
raiserror ('Invalid order by option specified.', 1, 2)
return(-1)
end
set @report = lower(@report)
if @report not in ('users') and @report is not null
begin
raiserror ('Invalid report option specified.', 1, 2)
return(-1)
end
if @report = 'users'
begin
select convert(varchar(30), nt_username) as "NT User Name",
convert(varchar(50), loginame) as "SQL Login Name",
count(*) as "Number of Connections"
from master..sysprocesses
group by nt_username, loginame
order by 3 desc, 2, 1
compute sum(count(*)), count(convert(varchar(50), loginame))
return(0)
end
if @onlyblocked = 1 and
exists(select * from master..sysprocesses where blocked > 0)
select spid as "Blocking Process ID",
convert(varchar(15), case dbid when 0 then 'no database context'
else db_name(dbid)
end) as "Database",
cmd as "Current Command",
convert(varchar(20), status) as "Process ID Status",
blocked as "Blocking Process ID",
cpu as "CPU Time",
physical_io "DISK I/O",
last_batch as "Last Batch",
lastwaittype as "Last Waittype",
waittime as "Current Waittime",
convert(varchar(30), waitresource) as "Wait Resource",
convert(varchar(15), hostname) as "Host Name",
convert(varchar(30), program_name) as "Program Name",
convert(varchar(20), nt_username) as "NT User Name",
convert(varchar(30), loginame) as "SQL Login Name"
from master..sysprocesses p1
where exists(select * from master..sysprocesses p2
where p2.blocked = p1.spid)
select spid as "Process ID",
convert(varchar(15), case dbid when 0 then 'no database context'
else db_name(dbid)
end) as "Database",
cmd as "Current Command",
convert(varchar(20), status) as "Process ID Status",
blocked as "Blocking Process ID",
cpu as "CPU Time",
physical_io "DISK I/O",
last_batch as "Last Batch",
lastwaittype as "Last Waittype",
waittime as "Current Waittime",
convert(varchar(30), waitresource) as "Wait Resource",
convert(varchar(15), hostname) as "Host Name",
convert(varchar(30), program_name) as "Program Name",
convert(varchar(20), nt_username) as "NT User Name",
convert(varchar(30), loginame) as "SQL Login Name"
from master..sysprocesses
where nt_username like @ntusername + '%' and
program_name like @programname + '%' and
hostname like @hostname + '%' and
loginame like @loginame + '%' and
spid = (case @spid when 0 then spid else @spid end) and
dbid = (case when @dbname = '%' then dbid else db_id(@dbname) end) and
((blocked > 0 and @onlyblocked = 1) or (@onlyblocked = 0))
order by case @orderby
when 'spid' then spid
when 'cpu' then cpu
when 'cpu desc' then -1*cpu
when 'io' then physical_io
when 'io desc' then -1*physical_io
when 'host' then 0
when 'program' then 0
when 'ntuser' then 0
when 'sqllogin' then 0
when 'lastbatch desc' then -1*cast(last_batch as float)
end,
case @orderby
when 'spid' then ''
when 'cpu' then ''
when 'cpu desc' then ''
when 'io' then ''
when 'io desc' then ''
when 'host' then hostname
when 'program' then program_name
when 'ntuser' then nt_username
when 'sqllogin' then loginame
when 'lastbatch' then convert(varchar, last_batch, 121)
end
go
IF OBJECTPROPERTY(OBJECT_ID('dbo.sp_who_ex'), 'IsProcedure') = 1
BEGIN
GRANT EXECUTE ON dbo.sp_who_ex To Public
PRINT '<<< CREATED PROCEDURE dbo.sp_who_ex >>>'
END
ELSE
PRINT '<<< FAILED CREATING PROCEDURE dbo.sp_who_ex >>>'
go
This page was last updated on May 01, 2006 04:28 PM.