SQL Server扩展事件 - 在语法中查找特定字符串

时间:2017-05-04 09:54:43

标签: sql-server

如果SQL查询语句中出现一些字符串,我该如何检查SQL Server扩展事件?

例如:我想每天从12:00到15:00查找包含字符串ord_id=4的所有查询。

如何通过扩展事件跟踪此事?

谢谢, 辖

2 个答案:

答案 0 :(得分:1)

在会话向导中,选择sql语句start并在全局字段中选择sql text,如下所示

enter image description here

在最终屏幕中,您可以按照以下屏幕截图

进行过滤

enter image description here

答案 1 :(得分:1)

您可以使用此查询来读取扩展事件

SELECT CONVERT(XML, event_data) XMLEventData FROM sys.fn_xe_file_target_read_file(N'PathForTheFile\*.xel', NULL, NULL, NULL)

如果你写*这意味着阅读所有文件,如果你知道在哪里看你可以写你的文件名而不是*

在此之后,为了方便眼睛使用下面的查询,您需要根据需要修改查询。

SELECT            

     xexml.value('(./action[@name="username"]/value)[1]', 'varchar(400)') as UserName                 

    ,xexml.value('(./action[@name="client_hostname"]/value)[1]', 'varchar(400)') as Client_Hostname 

    ,xexml.value('(./action[@name="collect_system_time"]/value)[1]', 'datetime') as ProcessTime                 

    ,xexml.value('(./data[@name="statement"]/value)[1]', 'nvarchar(4000)') as SQLStatement                

 FROM                 
(                
 SELECT CONVERT(XML, event_data) XMLEventData FROM sys.fn_xe_file_target_read_file(N'PathOfYourFiles\*.xel', NULL, NULL, NULL) f
) AS EventTable                 

CROSS APPLY XMLEventData.nodes('/event') n (xexml)                
WHERE cast(xexml.value('(./action[@name="collect_system_time"]/value)[1]', 'datetime')as time) between '12:00:00' and '15:00:00'
AND  xexml.value('(./data[@name="statement"]/value)[1]', 'nvarchar(4000)') like '%ord_id=4%'