0
私は、SQL2008r2で書いた拡張イベントから情報を削り取り、SQL上でエラートラッキングのより良いフォームを作成しようとしました。1つのレコードのみを返すXquery
多くの試行錯誤の後に私はついにが働いてになりましたが、最初の行だけを返すようです。私はので、私はそのデータに追加処理を行うと、私が書いた何を別のフォーマット
でそれを返すことができCTEに情報を読み取るしようとしている私が働いている何
;with events_cte as(
select
DATEADD(mi,
DATEDIFF(mi, GETUTCDATE(), CURRENT_TIMESTAMP),
xevents.event_data.value('(RingBufferTarget/event/@timestamp)[1]', 'datetime2')) AS [Timestamp],
xevents.event_data.value('(RingBufferTarget/event/data[@name="severity"]/value)[1]', 'bigint') AS [Error Severity],
xevents.event_data.value('(RingBufferTarget/event/data[@name="message"]/value)[1]', 'nvarchar(512)') AS [Error Message],
xevents.event_data.value('(RingBufferTarget/event/action[@name="sql_text"]/value)[1]', 'nvarchar(max)') AS [SQL Text],
xevents.event_data.value('(RingBufferTarget/event/action[@name="username"]/value)[1]', 'nvarchar(max)') AS [Username],
xevents.event_data.value('(RingBufferTarget/event/action[@name="database_id"]/value)[1]', 'nvarchar(max)') AS [DatabaseID]
From(Select CAST(xet.target_data AS xml) as event_data
FROM sys.dm_xe_session_targets xet
INNER JOIN sys.dm_xe_sessions xe
ON (xe.address = xet.event_session_address)
WHERE xe.name = 'what_queries_are_failing') as xevents)
(例)
<RingBufferTarget eventsPerSec="0" processingTime="0" totalEventsProcessed="55" eventCount="55" droppedCount="0" memoryUsed="161803">
<event name="error_reported" package="sqlserver" id="100" version="1" timestamp="2016-12-15T01:42:59.361Z">
<data name="error">
<type name="int32" package="package0" />
<value>50000</value>
<text />
</data>
<data name="severity">
<type name="int32" package="package0" />
<value>16</value>
<text />
</data>
<data name="state">
<type name="int32" package="package0" />
<value>1</value>
<text />
</data>
<data name="user_defined">
<type name="boolean" package="package0" />
<value>true</value>
<text />
</data>
<data name="message">
<type name="unicode_string" package="package0" />
<value>User Defined Exception!!!</value>
<text />
</data>
<action name="client_hostname" package="sqlserver">
<type name="unicode_string" package="package0" />
<value>hostname</value>
<text />
</action>
<action name="database_id" package="sqlserver">
<type name="uint16" package="package0" />
<value>1</value>
<text />
</action>
<action name="sql_text" package="sqlserver">
<type name="unicode_string" package="package0" />
<value>RAISERROR('User Defined Exception!!!', 16, 1)
</value>
<text />
</action>
<action name="tsql_stack" package="sqlserver">
<type name="unicode_string" package="package0" />
<value><frame level='1' handle='0x010001001561AB09005F28B1000000000000000000000000' line='1' offsetStart='0' offsetEnd='-1'/></value>
<text />
</action>
<action name="username" package="sqlserver">
<type name="unicode_string" package="package0" />
<value>user</value>
<text />
</action>
</event>
<event name="error_reported" package="sqlserver" id="100" version="1" timestamp="2016-12-15T01:42:59.361Z">
<data name="error">
<type name="int32" package="package0" />
<value>50000</value>
<text />
</data>
<data name="severity">
<type name="int32" package="package0" />
<value>16</value>
<text />
</data>
<data name="state">
<type name="int32" package="package0" />
<value>1</value>
<text />
</data>
<data name="user_defined">
<type name="boolean" package="package0" />
<value>true</value>
<text />
</data>
<data name="message">
<type name="unicode_string" package="package0" />
<value>User Defined Exception!!!</value>
<text />
</data>
<action name="client_hostname" package="sqlserver">
<type name="unicode_string" package="package0" />
<value>hostname</value>
<text />
</action>
<action name="database_id" package="sqlserver">
<type name="uint16" package="package0" />
<value>1</value>
<text />
</action>
<action name="sql_text" package="sqlserver">
<type name="unicode_string" package="package0" />
<value>RAISERROR('User Defined Exception!!!', 16, 1)
</value>
<text />
</action>
<action name="tsql_stack" package="sqlserver">
<type name="unicode_string" package="package0" />
<value><frame level='1' handle='0x010001001561AB09005F28B1000000000000000000000000' line='1' offsetStart='0' offsetEnd='-1'/></value>
<text />
</action>
<action name="username" package="sqlserver">
<type name="unicode_string" package="package0" />
<value>user</value>
<text />
</action>
</event>
</RingBufferTarget>
私が得たもの:1つの行を返すように見えますが、それはCTEでもかまいませんか?
だから私の質問は次のとおりです。
私はXML内のレコードの残りが通って引っ張らなければ取得できますか?
何か助力や提案をいただければ幸いです。