如何在SQL Server中记录存储过程执行的所有SQL查询
记录存储过程执行的所有SQL查询方法
SQL Server
- 用SQL Server Profiler捕获:新建跟踪,选择「SQL:BatchCompleted」和「SP:StmtCompleted」事件,设置过滤条件匹配目标存储过程名称,启动跟踪后就能捕获所有执行的SQL语句。
- 用Extended Events收集:创建会话,添加
sql_statement_completed事件,设置筛选器object_name等于你的存储过程名,启动会话后即可收集执行的SQL内容。 - 手动添加输出语句:如果存储过程包含动态SQL,在执行前插入
PRINT @动态SQL变量或SELECT @动态SQL变量;静态语句也可按需添加PRINT输出。
MySQL
- 临时开启通用日志:执行
SET GLOBAL general_log = ON;,运行存储过程后关闭日志(SET GLOBAL general_log = OFF;),日志文件会记录所有执行的SQL,注意生产环境不可长时间开启,避免影响性能。 - 查询Performance Schema:确保statement_events表已启用,执行
SELECT SQL_TEXT FROM performance_schema.events_statements_history WHERE OBJECT_NAME = '你的存储过程名';即可获取执行过的语句。 - 手动输出内容:动态SQL执行前用
SELECT @dyn_sql;输出,静态语句可按需添加SELECT打印。
Oracle
- 用DBMS_OUTPUT输出:在存储过程对应位置添加
DBMS_OUTPUT.PUT_LINE('执行SQL:' || sql_text);,执行前先运行SET SERVEROUTPUT ON;,控制台就能看到输出内容。 - 开启SQL Trace:执行
ALTER SESSION SET SQL_TRACE = TRUE;,运行存储过程后关闭跟踪,生成的跟踪文件用TKPROF工具分析,可得到所有执行的SQL语句。 - 查询AWR报告:若存储过程已执行过,生成AWR报告可找到相关SQL,但该方式更偏向性能分析,非实时捕获。
内容的提问来源于stack exchange,提问作者Mohammed Chanaa
相关产品推荐
相关产品推荐

