• Better solution, without cursors or temp tables

    select distinct

    s.session_id as spid,

    cast( convert(varchar, dateadd(second, datediff(ss, s.last_request_start_time, getdate()),'' ), 108) as varchar(8))[delta],

    r.cpu_time / nullif(datediff(ss, s.last_request_start_time, getdate()),0) [cpu/sec],

    (r.reads + r.writes) / nullif(datediff(ss, s.last_request_start_time, getdate()),0) [diskio/sec],

    isnull(w.blocking_session_id, 0) as blockedby,

    s.host_name,

    s.login_name as login,

    db_name(r.database_id) as dbname,

    s.program_name,

    s.client_interface_name,

    s.status,

    r.cpu_time as cpu,

    r.granted_query_memory as memory,

    r.reads,

    r.writes,

    r.logical_reads,

    r.row_count,

    cast(r.percent_complete as dec(4,1)) as pct_complete,

    r.command,

    t.text,

    c.client_net_address

    from sys.dm_exec_sessions s

    left join sys.dm_os_waiting_tasks w on s.session_id = w.session_id

    left join sys.dm_exec_requests r on s.session_id = r.session_id

    left join sys.dm_exec_connections c on s.session_id = c.session_id

    outer apply sys.dm_exec_sql_text(plan_handle) t

    where s.status != 'sleeping' -- // no inactive processes

    and s.session_id != @@spid