WITH Deadlocks AS ( SELECT TOP (10) xdr.value('@timestamp', 'datetime2') AS deadlock_time, CAST(xdr.query('(data/value/deadlock)[1]') AS xml) AS deadlock_xml FROM ( SELECT CAST(target_data AS xml) AS target_data FROM sys.dm_xe_session_targets AS xt JOIN sys.dm_xe_sessions AS xs ON xs.address = xt.event_session_address WHERE xs.name = N'system_health' AND xt.target_name = N'ring_buffer' ) AS rb CROSS APPLY rb.target_data.nodes( 'RingBufferTarget/event[@name="xml_deadlock_report"]' ) AS XEventData(xdr) ORDER BY xdr.value('@timestamp', 'datetime2') DESC),Resources AS ( SELECT d.deadlock_time, r.query('.') AS resource_xml, r.value('local-name(.)', 'nvarchar(80)') AS resource_type, NULLIF( r.value('local-name((UnderlyingResource/*)[1])', 'nvarchar(80)'), N'' ) AS underlying_resource_type, COALESCE( NULLIF(r.value('@objectname', 'nvarchar(512)'), N''), NULLIF( r.value('(UnderlyingResource/*/@objectname)[1]', 'nvarchar(512)'), N'' ) ) AS object_name, COALESCE( NULLIF(r.value('@indexname', 'nvarchar(512)'), N''), NULLIF( r.value('(UnderlyingResource/*/@indexname)[1]', 'nvarchar(512)'), N'' ) ) AS index_name, r.value('@mode', 'nvarchar(20)') AS resource_mode FROM Deadlocks AS d CROSS APPLY d.deadlock_xml.nodes('/deadlock/resource-list/*') AS R(r))SELECT r.deadlock_time, r.resource_type, r.underlying_resource_type, r.object_name, r.index_name, r.resource_mode, N'owner' AS participant_role, owner.value('@id', 'nvarchar(100)') AS process_id, owner.value('@mode', 'nvarchar(20)') AS lock_mode, CAST(NULL AS nvarchar(60)) AS request_typeFROM Resources AS rCROSS APPLY r.resource_xml.nodes('/*/owner-list/owner') AS O(owner) UNION ALL SELECT r.deadlock_time, r.resource_type, r.underlying_resource_type, r.object_name, r.index_name, r.resource_mode, N'waiter' AS participant_role, waiter.value('@id', 'nvarchar(100)') AS process_id, waiter.value('@mode', 'nvarchar(20)') AS lock_mode, waiter.value('@requestType', 'nvarchar(60)') AS request_typeFROM Resources AS rCROSS APPLY r.resource_xml.nodes('/*/waiter-list/waiter') AS W(waiter)ORDER BY deadlock_time DESC, resource_type, object_name, participant_role;