首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可报告的Sp_Who2

可报告的Sp_Who2
EN

Code Review用户
提问于 2016-01-21 14:45:31
回答 1查看 135关注 0票数 2

sp_who2的一个问题是,当它两次调用spid时,需要在控制台中运行它,而且大多数报告工具都会将其抛出为错误。

我的问题是,使用下面的代码重新格式化sp_who2比使用sp_who的定义和删除

-向右滚动的用户提供方便的额外服务。

正如我们所描述的那样!

代码语言:javascript
复制
Create Proc [Reports].[UspResults_sp_who2]
As
Begin 
    Declare @Results Table
        (
            [SPID] Int
        , [Status] Varchar(Max)
        , [LOGIN] Varchar(Max)
        , [HostName] Varchar(Max)
        , [BlkBy] Varchar(Max)
        , [DBName] Varchar(Max)
        , [Command] Varchar(Max)
        , [CPUTime] Int
        , [DiskIO] Int
        , [LastBatch] Varchar(Max)
        , [ProgramName] Varchar(Max)
        , [SPID_1] Int
        , [REQUESTID] Int
        );

    Insert  Into @Results
            ( [SPID]
            , [Status]
            , [LOGIN]
            , [HostName]
            , [BlkBy]
            , [DBName]
            , [Command]
            , [CPUTime]
            , [DiskIO]
            , [LastBatch]
            , [ProgramName]
            , [SPID_1]
            , [REQUESTID]
            )
            Exec [sys].[sp_who2];

    --Only show SPID once, show blocked processes first, followed by CPU time and DISK IO hoggers
    Select  [SPID]
            , [Status]
            , [LOGIN]
            , [HostName]
            , [BlkBy]
            , [DBName]
            , [Command]
            , [CPUTime]
            , [DiskIO]
            , [LastBatch]
            , [ProgramName]
            , [REQUESTID]
    From    @Results
    Order By [BlkBy] Asc
            , [CPUTime] Desc
            , [DiskIO] Desc
            , [SPID] Asc;
End;
EN

回答 1

Code Review用户

发布于 2016-01-21 19:21:11

如果您在Server 2012+上,还有另一个选项。

您可以使用WITH RESULT SETS和别名有问题的重复列名(如下面的BonusSpid )。

代码语言:javascript
复制
EXEC sys.sp_who2
WITH RESULT SETS
(
  (
      SPID INT NOT NULL,
      Status VARCHAR(1000) NULL,
      Login SYSNAME NULL,
      HostName SYSNAME NULL,
      BlkBy SYSNAME NULL,
      DBName SYSNAME NULL,
      Command VARCHAR(1000) NULL,
      CPUTime INT NULL,
      DiskIO INT NULL,
      LastBatch VARCHAR(1000) NULL,
      ProgramName VARCHAR(1000) NULL,
      BonusSpid INT  NOT NULL,         /*Now unique name*/
      RequestId INT NULL 
  )
);

此选项与表变量解决方案具有相同的缺点,即如果sp_who2的定义发生更改并从其中添加或删除列(我认为RequestId是在2005年添加的),则该选项很容易损坏。

这是一个无文档的存储过程,因此它可能在没有警告的情况下随时更改定义或从产品中删除。

另一方面,如果您自己将代码复制并粘贴到一个新模块中,那么如果代码被更改,您将失去自动受益于任何改进/ bug修复的可能性。

但是,您应该考虑使用sp_whoisactive而不是上面的任何一种,因为它的开发要积极得多,并且有大量的其他特性。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/117499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档