有没有办法在不使用的情况下获取最后执行的 SQL Server 命令DBCC INPUTBUFFER
?
例如,是否有包含此信息的系统视图或目录?
谢谢。
您可以将您的 SPID(SQL 进程 ID)传递给以下对象:
DECLARE @sql_handle VARBINARY(128);
SELECT @sql_handle = sql_handle
FROM sys.sysprocesses
WHERE spid = @@SPID; --you can pass a different SPID here
SELECT [text]
FROM sys.dm_exec_sql_text(@sql_handle);
是的,从SQL Server 2014 SP4 及更新版本开始,您可以使用以下 DMV:
IF OBJECT_ID('sys.dm_exec_input_buffer') IS NOT NULL --we are running SQL 2014 SP4 or newer!
BEGIN
SELECT b.*
FROM sys.dm_exec_input_buffer(@@SPID, NULL) b;
END
ELSE --we are running SQL 2014 SP3 or older...
BEGIN
CREATE TABLE #TraceInfo (
EventType NVARCHAR(255)
,parameters INTEGER
,event_info NVARCHAR(4000)
);
INSERT INTO #TraceInfo
EXEC ('DBCC INPUTBUFFER(@@SPID) WITH NO_INFOMSGS');
SELECT t.*
FROM #TraceInfo t;
END