sp_who2の出力をテーブルに格納する


8

最初にテーブルを作成しなくても、sp_who2の出力をテーブルに格納できる次のようなものを探しています。

create table test as exec sp_who2

SQL Serverのどのバージョンを使用していますか?
アーロンバートランド

回答:



17
USE yourDb;

CREATE TABLE temp_sp_who2
    (
      SPID INT,
      Status VARCHAR(1000) NULL,
      Login SYSNAME NULL,
      HostName SYSNAME NULL,
      BlkBy SYSNAME NULL,
      DBName SYSNAME NULL,
      Command VARCHAR(1000) NULL,
      CPUTime INT NULL,
      DiskIO BIGINT NULL, -- int
      LastBatch VARCHAR(1000) NULL,
      ProgramName VARCHAR(1000) NULL,
      SPID2 INT
      , RequestId INT NULL --comment out for SQL 2000 databases

    )


INSERT  INTO temp_sp_who2
EXEC sp_who2

SELECT  *
FROM    temp_sp_who2
WHERE   DBName = 'yourDb'

リンク

SQL Server 2012でテストしたところ


3

サーバーでのアクティビティを追跡するなど、これを長期にわたってキャプチャしたい人のためのMihaiのソリューションの拡張:

IF OBJECT_ID('dbo.temp_sp_who2', 'U') IS NOT NULL 
BEGIN
  DROP TABLE dbo.temp_sp_who2;
END; 

CREATE TABLE temp_sp_who2
    (
      SPID INT
      ,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
      ,SPID2 INT
      , RequestID INT NULL --comment out for SQL 2000 databases
      , InsertedDate datetime DEFAULT GETDATE()
    );

--This insert can be added to a job that runs periodically.
INSERT  INTO temp_sp_who2
    (
        SPID
        ,Status                                                                                                                                                                                                                                                           
        ,LOGIN                                                                                                                            
        ,HostName                                                                                                                         
        ,BlkBy                                                                                                                            
        ,DBName                                                                                                                           
        ,Command                                                                                                                                                                                                                                                          
        ,CPUTime     
        ,DiskIO      
        ,LastBatch                                                                                                                                                                                                                                                        
        ,ProgramName                                                                                                                                                                                                                                                      
        ,SPID2       
        ,RequestID   
    )
EXECUTE sp_who2;

SELECT  *
FROM    temp_sp_who2;

2

質問では、テーブルを作成せずに結果を取得できる方法を求めました。これは、テーブル変数を使用して行います。

CREATE PROC [dbo].[sp_who2db] (@DBName VARCHAR(200))
AS
BEGIN

      DECLARE @who2 TABLE(
            [SPID] INT,
            [Status] VARCHAR(200),
            [Login] VARCHAR(200),
            [HostName] VARCHAR(200),
            [BlkBy] VARCHAR(20),
            [DBName] VARCHAR(200),
            [Command] VARCHAR(200),
            [CPUTime] BIGINT,
            [DiskIO] BIGINT,
            [LastBatch] VARCHAR(20),
            [ProgramName] VARCHAR(200),
            [SPID2] INT,
            [RequestID] INT
      )

      INSERT @who2
      EXEC sp_who2

      SELECT * FROM @who2 WHERE DBName = @DBName

END

Jon Egerton によるデータベースによるsp_who2のフィルタリングから。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.