Sql-Server

擴展事件 - 如何擷取給定儲存過程的執行以及傳遞的參數值?

  • July 29, 2022

您如何擷取給定儲存過程的執行以及傳遞的參數值?

我嘗試使用 sqlserver.module_end 但它只顯示沒有參數值的儲存過程執行:

CREATE EVENT SESSION [SP Executions By Name] ON SERVER 
ADD EVENT sqlserver.module_end(SET collect_statement=(1)
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.query_hash_signed,sqlserver.session_id,sqlserver.sql_text,sqlserver.username)
   WHERE ([object_type]='P ' AND [sqlserver].[database_name]=N'MyDB' AND [object_name]=N'MyStoredProc'))
ADD TARGET package0.event_file(SET filename=N'Z:\Extended_Events\StoredProcedures_ByNameAndDB.xel',max_file_size=(5),max_rollover_files=(5))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)

僅當您的 proc 是批量送出的 oproc 時,這才有可能。如果是這種情況,請使用 rpc_completed 或 sql_batch_completed 並使用 like 謂詞進行過濾

嵌套 procs 是不可能的,請參閱參數值。

考慮將參數記錄在表格中以進行分析。

引用自:https://dba.stackexchange.com/questions/314927