Sql server 获取SQL Server中不带DBCC INPUTBUFFER的最后一个命令
有没有一种方法可以在不使用Sql server 获取SQL Server中不带DBCC INPUTBUFFER的最后一个命令,sql-server,dbcc,Sql Server,Dbcc,有没有一种方法可以在不使用DBCC INPUTBUFFER的情况下获取最后执行的SQL Server命令 例如,是否存在包含此信息的系统视图或目录 谢谢。您可以将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 her
DBCC INPUTBUFFER
的情况下获取最后执行的SQL Server命令
例如,是否存在包含此信息的系统视图或目录
谢谢。您可以将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
虽然这可能适用于许多情况,但情况不同。当客户端调用存储过程时,DBCC INPUT BUFFER将返回该存储过程及其调用时使用的参数,但sys.dm_exec_sql_text将返回创建该存储过程的文本。