4

有没有办法在不使用的情况下获取最后执行的 SQL Server 命令DBCC INPUTBUFFER

例如,是否有包含此信息的系统视图或目录?

谢谢。

4

2 回答 2

2

您可以将您的 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);
于 2013-10-16T09:33:53.630 回答
0

是的,从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
于 2019-07-10T10:11:29.363 回答