Simpan output sp_who2 dalam sebuah tabel

8

Saya mencari sesuatu seperti ini, di mana saya bisa menyimpan output sp_who2 dalam sebuah tabel, tanpa harus terlebih dahulu membuat tabel:

create table test as exec sp_who2
Hitesh Chouhan
sumber
Apa versi SQL Server Anda?
Aaron Bertrand

Jawaban:

7

Jika Anda menjalankan SQL Server 2005 SP1 dan yang lebih tinggi, yang terbaik adalah menggunakan sp_whoisactive oleh Adam Machanic. Ini jauh lebih baik daripada sp_who2 (lihat seri bulan terperinci di situs yang saya tautkan).

Kendra (dari tim Brent) memiliki pos yang sangat baik tentang Mengumpulkan Data dari sp_WhoIsActive in a Table

Kin Shah
sumber
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'

Tautan

Baru saja mengujinya di SQL server 2012

Mihai
sumber
3

Perluasan solusi Mihai bagi siapa saja yang ingin menangkap ini dari waktu ke waktu, seperti melacak aktivitas di server:

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;
Akan
sumber
2

Pertanyaannya menanyakan metode yang memungkinkan Anda untuk mendapatkan hasil tanpa membuat tabel. Ini apakah itu menggunakan variabel tabel:

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

Dari Filtering sp_who2 oleh database oleh Jon Egerton .

rstackhouse
sumber