Ich suche nach so etwas, wo ich die Ausgabe von sp_who2 in einer Tabelle speichern könnte, ohne zuerst die Tabelle erstellen zu müssen:
create table test as exec sp_who2
Ich suche nach so etwas, wo ich die Ausgabe von sp_who2 in einer Tabelle speichern könnte, ohne zuerst die Tabelle erstellen zu müssen:
create table test as exec sp_who2
Antworten:
Wenn Sie SQL Server 2005 SP1 oder höher ausführen , verwenden Sie am besten sp_whoisactive von Adam Machanic. Es ist viel besser als sp_who2 (siehe die detaillierte Monatsreihe auf der Website, die ich verlinkt habe).
Kendra (aus Brents Team) hat einen hervorragenden Beitrag zum Sammeln von Daten von sp_WhoIsActive in einer Tabelle
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'
Habe es gerade auf SQL Server 2012 getestet
Erweiterung der Mihai -Lösung für alle, die dies im Laufe der Zeit erfassen möchten, um die Aktivitäten auf einem Server zu verfolgen:
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;
In der Frage wurde nach einer Methode gefragt, mit der Sie die Ergebnisse abrufen können, ohne eine Tabelle zu erstellen. Dies geschieht mithilfe einer Tabellenvariablen:
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
Aus dem Filtern von sp_who2 nach Datenbank von Jon Egerton .