'Extended Events - Deprecated features - sql_text sometimes null
I am using the below Extended Events session to locate usage of deprecated features. Sometimes the sql_text returns null. Microsoft SQL Server 2019
CREATE EVENT SESSION [DeprecatedFeatures2] ON SERVER
ADD EVENT sqlserver.deprecation_announcement(
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,
sqlserver.server_principal_name,sqlserver.session_nt_username,sqlserver.sql_text,sqlserver.username)),
ADD EVENT sqlserver.deprecation_final_support(
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,
sqlserver.server_principal_name,sqlserver.session_nt_username,sqlserver.sql_text,sqlserver.username))
ADD TARGET package0.ring_buffer
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)
And the below to read
DECLARE @Target_Data XML =
(
SELECT TOP 1 Cast(xet.target_data AS XML) AS targetdata
FROM sys.dm_xe_session_targets AS xet
INNER JOIN sys.dm_xe_sessions AS xes
ON xes.address = xet.event_session_address
WHERE xes.name = 'DeprecatedFeatures2'
AND xet.target_name = 'ring_buffer'
);
SELECT
CONVERT(datetime2, SwitchOffset(CONVERT(datetimeoffset,the.event_data.value('(@timestamp)[1]', 'datetime2')),
DateName(TzOffset, SYSDATETIMEOFFSET()))) AS datetime_local,
the.event_data.value('(@name)[1]', 'nvarchar(40)') AS [deprecation_type],
the.event_data.value('(data[@name="feature"]/value)[1]', 'nvarchar(100)') AS [feature],
the.event_data.value('(data[@name="message"]/value)[1]', 'nvarchar(max)') AS [message],
the.event_data.value('(action[@name="database_name"]/value)[1]', 'sysname') AS [database_name],
the.event_data.value('(action[@name="username"]/value)[1]', 'sysname') AS [username],
the.event_data.value('(action[@name="session_nt_username"]/value)[1]', 'sysname') AS [session_nt_username],
the.event_data.value('(action[@name="server_principal_name"]/value)[1]', 'nvarchar(max)') AS [server_principal_name],
the.event_data.value('(action[@name="client_app_name"]/value)[1]', 'nvarchar(max)') AS [client_app_name],
the.event_data.value('(action[@name="client_hostname"]/value)[1]', 'nvarchar(max)') AS [client_hostname],
the.event_data.value('(action[@name="sql_text"]/value)[1]', 'nvarchar(max)') AS [sql_text]
--the.event_data.value('(action[@name="tsql_stack"]/value/frames/frame)[1]', 'nvarchar(max)') AS [tsql_stack],
--the.event_data.value('(action[@name="tsql_frame"]/value)[1]', 'nvarchar(max)') AS [tsql_frame]
--TRY_CAST(the.event_data.value('(action[@name="sql_text"]/value)[1]', 'varchar(max)') AS XML) AS [sql_text2]
FROM @Target_Data.nodes('//RingBufferTarget/event') AS the (event_data)
Sometimes the sql_text is null.
The events where the sql_text is null all seem to have the following in common
- client_app_name = .Net SqlClient Data Provider
- client_host_name = The same server on which the SQL instance is hosted on
Any idea how to get the sql_text so that I can find the source
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
