Results 1 to 4 of 4

Thread: SQL 2k - Users On-Line Stored Procedure [Resolved]

Threaded View

  1. #1

    Thread Starter
    Ex-Super Mod RobDog888's Avatar
    Join Date
    Apr 2001
    Location
    LA, Calif. Raiders #1 AKA:Gangsta Yoda™
    Posts
    60,709

    Resolved SQL 2k - Users On-Line Stored Procedure [Resolved]

    I want to modify this sp to filter for only my program so I can
    offer the "Users on-line" info in y program. I want to place the
    copy of the modified sp in my db so it will not conflict with the
    original sp. So how to modify it? I want all the fields but
    the "SPID", "Status", "BlkBy", and "Command". Use a sample
    program name of "MyProgram". Do I just delete the fields
    from "Capture consistent sysprocesses" on down?

    Code:
    CREATE PROCEDURE usp_RRGetUsersOnLine  --- 2003/09/17
        @loginame     sysname = NULL
    as
    
    set nocount on
    
    declare
        @retcode         int
    
    declare
        @sidlow         varbinary(85)
       ,@sidhigh        varbinary(85)
       ,@sid1           varbinary(85)
       ,@spidlow         int
       ,@spidhigh        int
    
    declare
        @charMaxLenLoginName      varchar(6)
       ,@charMaxLenDBName         varchar(6)
       ,@charMaxLenCPUTime        varchar(10)
       ,@charMaxLenDiskIO         varchar(10)
       ,@charMaxLenHostName       varchar(10)
       ,@charMaxLenProgramName    varchar(10)
       ,@charMaxLenLastBatch      varchar(10)
       ,@charMaxLenCommand        varchar(10)
    
    declare
        @charsidlow              varchar(85)
       ,@charsidhigh             varchar(85)
       ,@charspidlow              varchar(11)
       ,@charspidhigh             varchar(11)
    
    --------
    
    select
        @retcode         = 0      -- 0=good ,1=bad.
    
    --------defaults
    select @sidlow = convert(varbinary(85), (replicate(char(0), 85)))
    select @sidhigh = convert(varbinary(85), (replicate(char(1), 85)))
    
    select
        @spidlow         = 0
       ,@spidhigh        = 32767
    
    --------------------------------------------------------------
    IF (@loginame IS     NULL)  --Simple default to all LoginNames.
          GOTO LABEL_17PARM1EDITED
    
    --------
    
    -- select @sid1 = suser_sid(@loginame)
    select @sid1 = null
    if exists(select * from master.dbo.syslogins where loginname = @loginame)
    	select @sid1 = sid from master.dbo.syslogins where loginname = @loginame
    
    IF (@sid1 IS NOT NULL)  --Parm is a recognized login name.
       begin
       select @sidlow  = suser_sid(@loginame)
             ,@sidhigh = suser_sid(@loginame)
       GOTO LABEL_17PARM1EDITED
       end
    
    --------
    
    IF (lower(@loginame) IN ('active'))  --Special action, not sleeping.
       begin
       select @loginame = lower(@loginame)
       GOTO LABEL_17PARM1EDITED
       end
    
    --------
    
    IF (patindex ('%[^0-9]%' , isnull(@loginame,'z')) = 0)  --Is a number.
       begin
       select
                 @spidlow   = convert(int, @loginame)
                ,@spidhigh  = convert(int, @loginame)
       GOTO LABEL_17PARM1EDITED
       end
    
    --------
    
    RaisError(15007,-1,-1,@loginame)
    select @retcode = 1
    GOTO LABEL_86RETURN
    
    
    LABEL_17PARM1EDITED:
    
    
    --------------------  Capture consistent sysprocesses.  -------------------
    
    SELECT
    
      spid
     ,status
     ,sid
     ,hostname
     ,program_name
     ,cmd
     ,cpu
     ,physical_io
     ,blocked
     ,dbid
     ,convert(sysname, rtrim(loginame))
            as loginname
     ,spid as 'spid_sort'
    
     ,  substring( convert(varchar,last_batch,111) ,6  ,5 ) + ' '
      + substring( convert(varchar,last_batch,113) ,13 ,8 )
           as 'last_batch_char'
    
          INTO    #tb1_sysprocesses
          from master.dbo.sysprocesses   (nolock)
    
    
    
    --------Screen out any rows?
    
    IF (@loginame IN ('active'))
       DELETE #tb1_sysprocesses
             where   lower(status)  = 'sleeping'
             and     upper(cmd)    IN (
                         'AWAITING COMMAND'
                        ,'MIRROR HANDLER'
                        ,'LAZY WRITER'
                        ,'CHECKPOINT SLEEP'
                        ,'RA MANAGER'
                                      )
    
             and     blocked       = 0
    
    
    
    --------Prepare to dynamically optimize column widths.
    
    
    Select
        @charsidlow     = convert(varchar(85),@sidlow)
       ,@charsidhigh    = convert(varchar(85),@sidhigh)
       ,@charspidlow     = convert(varchar,@spidlow)
       ,@charspidhigh    = convert(varchar,@spidhigh)
    
    
    
    SELECT
                 @charMaxLenLoginName =
                      convert( varchar
                              ,isnull( max( datalength(loginname)) ,5)
                             )
    
                ,@charMaxLenDBName    =
                      convert( varchar
                              ,isnull( max( datalength( rtrim(convert(varchar(128),db_name(dbid))))) ,6)
                             )
    
                ,@charMaxLenCPUTime   =
                      convert( varchar
                              ,isnull( max( datalength( rtrim(convert(varchar(128),cpu)))) ,7)
                             )
    
                ,@charMaxLenDiskIO    =
                      convert( varchar
                              ,isnull( max( datalength( rtrim(convert(varchar(128),physical_io)))) ,6)
                             )
    
                ,@charMaxLenCommand  =
                      convert( varchar
                              ,isnull( max( datalength( rtrim(convert(varchar(128),cmd)))) ,7)
                             )
    
                ,@charMaxLenHostName  =
                      convert( varchar
                              ,isnull( max( datalength( rtrim(convert(varchar(128),hostname)))) ,8)
                             )
    
                ,@charMaxLenProgramName =
                      convert( varchar
                              ,isnull( max( datalength( rtrim(convert(varchar(128),program_name)))) ,11)
                             )
    
                ,@charMaxLenLastBatch =
                      convert( varchar
                              ,isnull( max( datalength( rtrim(convert(varchar(128),last_batch_char)))) ,9)
                             )
          from
                 #tb1_sysprocesses
          where
    --             sid >= @sidlow
    --      and    sid <= @sidhigh
    --      and
                 spid >= @spidlow
          and    spid <= @spidhigh
    
    
    
    --------Output the report.
    
    
    EXECUTE(
    '
    SET nocount off
    
    SELECT
                 SPID          = convert(char(5),spid)
    
                ,Status        =
                      CASE lower(status)
                         When ''sleeping'' Then lower(status)
                         Else                   upper(status)
                      END
    
                ,Login         = substring(loginname,1,' + @charMaxLenLoginName + ')
    
                ,HostName      =
                      CASE hostname
                         When Null  Then ''  .''
                         When '' '' Then ''  .''
                         Else    substring(hostname,1,' + @charMaxLenHostName + ')
                      END
    
                ,BlkBy         =
                      CASE               isnull(convert(char(5),blocked),''0'')
                         When ''0'' Then ''  .''
                         Else            isnull(convert(char(5),blocked),''0'')
                      END
    
                ,DBName        = substring(case when dbid = 0 then null when dbid <> 0 then db_name(dbid) end,1,' + @charMaxLenDBName + ')
                ,Command       = substring(cmd,1,' + @charMaxLenCommand + ')
    
                ,CPUTime       = substring(convert(varchar,cpu),1,' + @charMaxLenCPUTime + ')
                ,DiskIO        = substring(convert(varchar,physical_io),1,' + @charMaxLenDiskIO + ')
    
                ,LastBatch     = substring(last_batch_char,1,' + @charMaxLenLastBatch + ')
    
                ,ProgramName   = substring(program_name,1,' + @charMaxLenProgramName + ')
                ,SPID          = convert(char(5),spid)  --Handy extra for right-scrolling users.
          from
                 #tb1_sysprocesses  --Usually DB qualification is needed in exec().
          where
                 spid >= ' + @charspidlow  + '
          and    spid <= ' + @charspidhigh + '
    
          -- (Seems always auto sorted.)   order by spid_sort
    
    SET nocount on
    '
    )
    /*****AKUNDONE: removed from where-clause in above EXEC sqlstr
                 sid >= ' + @charsidlow  + '
          and    sid <= ' + @charsidhigh + '
          and
    **************/
    
    
    LABEL_86RETURN:
    
    
    if (object_id('tempdb..#tb1_sysprocesses') is not null)
                drop table #tb1_sysprocesses
    
    return @retcode -- sp_who2
    
    GO
    Thanks in advance for any help.
    Last edited by RobDog888; Sep 20th, 2004 at 12:12 PM.
    VB/Office Guru™ (AKA: Gangsta Yoda®)
    I dont answer coding questions via PM. Please post a thread in the appropriate forum.

    Microsoft MVP 2006-2011
    Office Development FAQ (C#, VB.NET, VB 6, VBA)
    Senior Jedi Software Engineer MCP (VB 6 & .NET), BSEE, CET
    If a post has helped you then Please Rate it!
    Reps & Rating PostsVS.NET on Vista Multiple .NET Framework Versions Office Primary Interop AssembliesVB/Office Guru™ Word SpellChecker™.NETVB/Office Guru™ Word SpellChecker™ VB6VB.NET Attributes Ex.Outlook Global Address ListAPI Viewer utility.NET API Viewer Utility
    System: Intel i7 6850K, Geforce GTX1060, Samsung M.2 1 TB & SATA 500 GB, 32 GBs DDR4 3300 Quad Channel RAM, 2 Viewsonic 24" LCDs, Windows 10, Office 2016, VS 2019, VB6 SP6

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width