-- get information from XET binary files representing extended event session date
-- as per part 1 blog post:
-- straight select, view the XML manually in an SSMS window by clicking on the XML results column
select CAST(event_data as XML) , *
from sys.fn_xe_file_target_read_file
(
'C:\temp\ArithmeticErrors_0_128981071730370000.xet',
'C:\temp\ArithmeticErrors_0_128981071730390000.xem',
null,
null
)
-- Get only specific nodes
-- 2 different methods shown of the xquery, you can specify the name of the node
-- or you can specify its location in the structure
-- this means that you return every row for every event captured in the file
-- the results are then converted to SQL data types
SELECT
xdata.value('(/event/data[4]/value)[1]', 'varchar(100)') AS [error],
xdata.value('(/event/data[@name="severity"]/value)[1]', 'int') AS [severity],
xdata.value('(/event/action[@name="sql_text"]/value)[1]', 'varchar(max)') AS [sql_text]
FROM
(
select CAST(event_data as XML)
from sys.fn_xe_file_target_read_file
(
'C:\temp\ArithmeticErrors_0_128981071730370000.xet',
'C:\temp\ArithmeticErrors_0_128981071730390000.xem',
null,
null
)
) as xmlr(xdata)
-- using the above technique, you can now wrap the entire query and give it an alias
-- and then perform more useful T-SQL language queries on the results
-- here is an example of an aggregate
SELECT
convert(varchar(100), outer_results.[error]) as 'error',
convert(int, outer_results.[severity]) as 'severity',
convert(varchar(max), outer_results.[sql_text]) as 'sql_text',
count(*) as [count_occurances]
FROM
(
SELECT
xdata.value('(/event/data[4]/value)[1]', 'varchar(100)') AS [error],
xdata.value('(/event/data[@name="severity"]/value)[1]', 'int') AS [severity],
xdata.value('(/event/action[@name="sql_text"]/value)[1]', 'varchar(max)') AS [sql_text]
FROM
(
select CAST(event_data as XML)
from sys.fn_xe_file_target_read_file
(
'C:\temp\ArithmeticErrors_0_128981071730370000.xet',
'C:\temp\ArithmeticErrors_0_128981071730390000.xem',
null,
null
)
) as xmlr(xdata)
) as outer_results
group by error, severity,sql_text
-- finally using the same technique as above , here we have simple predicates as well
-- add a predicate into the outer query
SELECT
convert(varchar(100), outer_results.[error]) as 'error',
convert(int, outer_results.[severity]) as 'severity',
convert(varchar(max), outer_results.[sql_text]) as 'sql_text',
count(*) as [count_occurances]
FROM
(
SELECT
xdata.value('(/event/data[4]/value)[1]', 'varchar(100)') AS [error],
xdata.value('(/event/data[@name="severity"]/value)[1]', 'int') AS [severity],
xdata.value('(/event/action[@name="sql_text"]/value)[1]', 'varchar(max)') AS [sql_text]
FROM
(
select CAST(event_data as XML)
from sys.fn_xe_file_target_read_file
(
'C:\temp\ArithmeticErrors_0_128981071730370000.xet',
'C:\temp\ArithmeticErrors_0_128981071730390000.xem',
null,
null
)
) as xmlr(xdata)
) as outer_results
-- here is the extra predicate we have added
where outer_results.severity < 17
group by error, severity,sql_text