-- Funciona no SQL 2000 e versões superiores select A.spid,Substring(nt_UserName,1,20)as Nt_UserName, A.Blocked, case when A.blocked= 0 and(Isnull(C.Qt_Block_By,0)> 0) then 'Blocker' when A.blocked = 0 and (Isnull(C.Qt_Block_By,0)<= 0) then 'None' when A.blocked = A.spid then'Itself' else'Blk by other' end Type_block, waittime/1000 [WaitTime(s)], D.Name DataBaseName, Substring(program_name,1,20)as Programa, Qt_Blocked = Isnull(B.Qt_Blocked,0), Qt_Block_By= Isnull(C.Qt_Block_By,0) from sysprocesses A join sysDataBases D on A.DbId= D.DbId left join (select Spid, count(*) Qt_Blocked from sysprocesses where (Blocked <> 0)and (blocked<> spid) group by Spid ) B on A.Spid = B.Spid left join (select Blocked, count(*) Qt_Block_By from sysprocesses group by Blocked ) C on A.Spid= C.Blocked and A.Blocked <> A.Spid where A.spid>= 50 -- Conexões de usuário order by case when A.blocked = 0and (Isnull(C.Qt_Block_By,0)> 0) then 'Blocker' when A.blocked = 0 and (Isnull(C.Qt_Block_By,0)<= 0) then 'None' when A.blocked = A.spid then'Itself' else'Blk by other' end, Qt_Blocked, Qt_Block_By, WaitTime desc