0

我已将 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

我究竟做错了什么?

4

1 回答 1

2

您必须阅读“action”下方的节点“value”:

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)')
于 2015-12-28T11:50:09.547 回答