You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看未提交事务中执行的完整查询?已尝试Sp_who2

查看SQL Server未提交事务的完整查询语句

针对SQL Server环境,sp_who2仅能提供基础会话信息,无法直接展示未提交事务的完整查询内容,可通过以下几种方法实现需求:

方法1:联合动态管理视图(DMVs)查询

执行以下SQL,关联事务、会话与执行的SQL文本,直接获取未提交事务的完整语句:

SELECT 
    s.session_id,
    t.transaction_id,
    t.transaction_begin_time,
    -- 获取事务中执行的具体语句片段
    SUBSTRING(st.text, (r.statement_start_offset/2)+1, 
        ((CASE r.statement_end_offset 
            WHEN -1 THEN DATALENGTH(st.text) 
            ELSE r.statement_end_offset 
         END - r.statement_start_offset)/2) + 1) AS executed_query,
    st.text AS full_query_text -- 完整SQL文本
FROM sys.dm_tran_active_transactions t
JOIN sys.dm_tran_session_transactions stt ON t.transaction_id = stt.transaction_id
JOIN sys.dm_exec_sessions s ON stt.session_id = s.session_id
JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) st
WHERE t.transaction_state != 0 -- 过滤已完成的事务

方法2:使用SQL Server Profiler或Extended Events

  • SQL Server Profiler:创建跟踪时勾选Transactions类别下的Begin Transaction、Commit Transaction事件,同时关联TSQL类别下的SQL:BatchCompleted、RPC:Completed事件,通过会话ID过滤未提交事务,即可捕获完整查询。
  • Extended Events:创建事件会话,包含sqlserver.sql_statement_completed、sqlserver.transaction_begin、sqlserver.transaction_end事件,通过会话ID关联筛选未结束的事务,获取所有已执行的SQL语句。

方法3:使用DBCC INPUTBUFFER快速排查

若已知目标会话ID,可执行以下命令查看该会话最近执行的语句:

DBCC INPUTBUFFER(目标会话ID)

注意:该方法仅能返回最近一条语句,无法获取事务中所有已执行的查询,适合单会话快速排查场景。

内容的提问来源于stack exchange,提问作者semer sead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:25:22