Tôi đang tìm kiếm một cái gì đó như thế này, nơi tôi có thể lưu trữ đầu ra của sp_who2 trong một bảng mà không cần phải tạo bảng trước:
create table test as exec sp_who2
Tôi đang tìm kiếm một cái gì đó như thế này, nơi tôi có thể lưu trữ đầu ra của sp_who2 trong một bảng mà không cần phải tạo bảng trước:
create table test as exec sp_who2
Câu trả lời:
Nếu bạn đang chạy SQL Server 2005 SP1 trở lên, tốt nhất là sử dụng sp_whoisactive của Adam Machanic. Nó tốt hơn nhiều so với sp_who2 (xem chuỗi tháng chi tiết trên trang web mà tôi đã liên kết).
Kendra (từ nhóm của Brent) có một bài đăng tuyệt vời về Thu thập dữ liệu từ sp_WhoIsActive in a Table
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'
Chỉ cần thử nghiệm nó trên máy chủ SQL 2012
Mở rộng giải pháp của Mihai cho bất kỳ ai muốn nắm bắt điều này theo thời gian, muốn theo dõi hoạt động trên máy chủ:
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;
Câu hỏi yêu cầu một phương pháp cho phép bạn nhận được kết quả mà không cần tạo bảng. Điều này thực hiện bằng cách sử dụng một biến bảng:
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