Сохраните вывод sp_who2 в таблице

8

Я ищу что-то вроде этого, где я мог бы сохранить вывод sp_who2 в таблице, без необходимости сначала создать таблицу:

create table test as exec sp_who2
Хите чухан
источник
На какой версии SQL Server вы работаете?
Аарон Бертран

Ответы:

7

Если вы используете SQL Server 2005 с пакетом обновления 1 (SP1) и более поздних версий , лучше всего использовать sp_whoisactive от Адама Мачаника. Это намного лучше, чем sp_who2 (см. Подробную серию месяцев на сайте, на который я ссылался).

Кендра (из команды Брента) имеет отличный пост по сбору данных из sp_WhoIsActive в таблице

Кин Шах
источник
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

От фильтрации sp_who2 базой данных по Jon Эгертон .

rstackhouse
источник