SQL Server: чтение файлов XML для расширенных событий
Я установил SQL-сервер для сообщения об ошибках в виде XML-файлов через расширенные события. Теперь я хочу прочитать и отобразить их. Я делаю что-то не так, и некоторые данные отображаются не так, как ожидалось. Я максимально упростил, вот что я делаю:
declare @xmlColumn xml = '<event name="error_reported" package="sqlserver" timestamp="2015-08-25T14:22:24.576Z">
<data name="error_number">
<value>207</value>
</data>
<action name="username" package="sqlserver">
<value>John</value>
</action>
</event>'
select @xmlColumn.value('(/event/@timestamp)[1]','datetime2'),
@xmlColumn.value('(/event/data[@name="error_number"]/value)[1]', 'int'),
@xmlColumn.value('(/event/action[@name="username"]/text)[1]', 'varchar(99)')
Результат работы:
2015-08-25 14:22:24.5760000 207 NULL
Я ожидал:
2015-08-25 14:22:24.5760000 207 John
Что я делаю неправильно?
1 ответ
Решение
Вы должны прочитать узел "значение" ниже "действия":
select @xmlColumn.value('(/event/@timestamp)[1]','datetime2'),
@xmlColumn.value('(/event/data[@name="error_number"]/value)[1]', 'int'),
@xmlColumn.value('(/event/action[@name="username"]/value)[1]', 'varchar(99)')