SQL Server将sp_who结果保存下来

SQL Server是微软出品的数据库软件,日常可以用sp_who查看当前数据库中SQL Process清单,有时候我们查询问题和特定时间段有关系,例如凌晨的时候,但我们又不能凌晨的时候起床来查看sp_who来查询问题,那我们可以设置一个定时任务,在指定的时间段将sp_who结果保存下来。

具体操作步骤如下:

1、创建存储表

CREATE TABLE temp_sp_who2
(
CollectionTime Datetime NULL,
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,
LastBatch VARCHAR(1000) NULL,
ProgramName VARCHAR(1000) NULL,
SPID2 INT, 
RequestId INT NULL
)

2、将sp_who结果插入到存储表中

IF OBJECT_ID(N'tempdb..[#temp_who2]') is not null
Begin
	DROP TABLE #temp_who2
End
CREATE TABLE #temp_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,
	LastBatch VARCHAR(1000) NULL,
	ProgramName VARCHAR(1000) NULL,
	SPID2 INT,
	RequestId INT NULL
)

INSERT INTO #temp_who2
EXEC sp_who2

Insert into temp_sp_who2
select GETDATE() as 'CollectTime', * from #temp_who2

DROP TABLE #temp_who2	

它会创建一个临时表,然后将Exec sp_who2的结果保存到临时表中,然后将临时表中的结果再插入到物理表中,同时带上时间戳。