【问题标题】:Correct syntax for SQL Query with XML使用 XML 进行 SQL 查询的正确语法
【发布时间】:2019-09-24 19:20:21
【问题描述】:

我的 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 特别感兴趣,我想返回 -100 的 Number 值。

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

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

我应该怎么做?

【问题讨论】:

  • 在 XML 路径中 ActualValue 是否应该在 Number 之后?

标签: sql sql-server xml sqlxml


【解决方案1】:

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

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

db&lt;&gt;fiddle demo

参见Introduction to Using XPath QueriesXQuery Language Reference

【讨论】:

  • 当 OP 不在问题标签中时,你怎么知道它正在使用 SQL Server
  • @Abra 好问题,他的示例查询在我看来很像 Sql Server
  • 我的错,是的,是 SQL Server。
猜你喜欢
  • 1970-01-01
  • 2017-07-26
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
相关资源
最近更新 更多