使用XML的SQL查询的正确语法

时间:2019-05-07 07:11:17

标签: sql sql-server xml sqlxml

我的DataXML看起来像这样

<TestResults>    
<MethodResult>
X
X
<StepResult name="BluetoothERROR">
X
X
X
X
X
X
X
<StepResult name="FLOWERROR1">
        <Number value="-100" />
      </ActualValue>
X
X
<StepResult name="PowerOffError">
X
X
X
    </StepResult>
  </MethodResult>
</TestResults>

其中X表示具有不同名称的StepResult的其他实例,例如BluetoothError或PowerOffError。假定其他StepResults可以具有与“ FLOWERROR1”相似的输出。

我对名称为“ FlowError1”的StepResult特别感兴趣,我想返回Number值-100。

我已经尝试过这行代码,但是它不起作用,只显示Nulls。

f.ResultXML.value('(/TestResults/MethodResult/StepResult/ActualValue/Number/@Value)[1]', 'varchar(max)') As "Actual Value"

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以按名称过滤节点并返回第一个匹配节点的值:

select @data.value('(TestResults/MethodResult/StepResult[@name="FLOWERROR1"]/ActualValue/Number)[1]/@value', 'int')

db<>fiddle demo

请参见Introduction to Using XPath QueriesXQuery Language Reference