Захват переданных значений параметров в расширенных сеансах SQL Server?

Я установил расширенные события SQL Server, чтобы уловить последние 1000 неудавшихся запросов в конкретной базе данных в кольцевой буфер:

Create Event Session [Errors] on Server
Add Event sqlserver.error_reported (
    Action(
        sqlos.task_time,
        sqlserver.sql_text
    )
    Where sqlserver.database_name=N'MyDatabase'
    And error_number<>5701 -- Ignore changed db context messages
)
Add target package0.ring_buffer(Set max_memory=102400)
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=ON
)
Go

Теперь я могу запросить эти ошибки следующим образом:

Select 
    xmldata = Cast(xet.target_data as xml) 
Into #rbd
From sys.dm_xe_session_targets xet 
Join sys.dm_xe_sessions xe ON (xe.address = xet.event_session_address)
Where xe.name='errors' and target_name='ring_buffer'

; With Errors as (
    Select 
        e.query('.').value('(/event/@timestamp)[1]', 'datetime') as "TimeStamp",
        e.query('.').value('(/event/data[@name="message"]/value)[1]', 'nvarchar(max)') as "Message",
        e.query('.').value('(/event/action[@name="sql_text"]/value)[1]', 'nvarchar(max)') as "SqlText",
        e.query('.').value('(/event/action[@name="task_time"]/value)[1]', 'bigint')/@@TIMETICKS  as "Duration"
    From #rbd
    Cross Apply XMLData.nodes('/RingBufferTarget/event') as Event(e)
)
Select * from Errors
Where SqlText is not null

Drop Table #rbd

До сих пор так хорошо:

screenshot

Это уже помогло в более подробном отслеживании ошибок, возникающих на уровне приложений.

Что сделало бы его еще более полезным, было бы, если бы мы могли видеть значения параметров, передаваемые этим запросам, как вы можете в SQL Profiler. Поэтому, когда мы видим ошибку, подобную этой...

Conversion failed when converting date and/or time from character string.   

для этого SQL...

(@NewValue nvarchar(10),@KeyValue int)
Update SomeTable 
Set [email protected] Where [email protected]

... было бы информативным узнать, что значения параметров @NewValue и @KeyValue были.

Любые идеи, где я могу найти эту информацию?

Ответы

Ответ 1

Я думаю, что только событие sqlserver.rpc_completed даст вам полную команду SQL, включая значения параметров.