【问题标题】:Read from XML selecting by multiple attributes从多个属性选择的 XML 中读取
【发布时间】:2020-08-30 19:22:28
【问题描述】:

如何在 SQL Server 中查询此特定 XML 结果以从下方获取 Flow sensor="DUT" unit="adc" testpoint="1" 的所有值?

<Phitrics>
  <TestResults>
    <ParametricData>
      <CalibrationDiagnostic>
        <Flow sensor="DUT" unit="adc" testpoint="0">0</Flow>
        <Flow sensor="Cal" unit="L/min" testpoint="0">0.0</Flow>
        <Flow sensor="DUT" unit="adc" testpoint="1">24</Flow>
        <Flow sensor="Cal" unit="L/min" testpoint="1">1.9</Flow>
        <Flow sensor="DUT" unit="adc" testpoint="2">41</Flow>
      </CalibrationDiagnostic>
    </ParametricData>
  </TestResults>
</Phitrics>

我试过了;

SELECT XmlResults.value('data(/Phitrics/TestResults/ParametricData/CalibrationDiagnostic/Flow sensor="DUT" unit="adc" testpoint="1"/text())[1]', 'varchar(10)')    
FROM table

但我收到以下错误:

XQuery [ResultsTbl.XmlResults.value()]: ',' or ')' 预期

不知道我在这里做错了什么,任何帮助将不胜感激!

【问题讨论】:

  • 你好戴尔,刚刚设法检查。您的解决方案有效。非常感谢!

标签: sql sql-server xml tsql


【解决方案1】:

你不见了:

  1. 属性匹配条件周围的方括号 ([])
  2. 以“@”作为属性名称的前缀
  3. 分别添加每个匹配条件
select XmlResults.value('data(/Phitrics/TestResults/ParametricData/CalibrationDiagnostic/Flow[@sensor="DUT"][@unit="adc"][@testpoint="1"]/text())[1]', 'varchar(10)')
from Table

【讨论】:

    【解决方案2】:
    DECLARE @xml XML
    set @xml = 
    '<Phitrics>
     <TestResults>
      <ParametricData>
       <CalibrationDiagnostic>
        <Flow sensor="DUT" unit="adc" testpoint="0">0</Flow>
        <Flow sensor="Cal" unit="L/min" testpoint="0">0.0</Flow>
        <Flow sensor="DUT" unit="adc" testpoint="1">24</Flow>
        <Flow sensor="Cal" unit="L/min" testpoint="1">1.9</Flow>
        <Flow sensor="DUT" unit="adc" testpoint="2">41</Flow>
       </CalibrationDiagnostic>
       </ParametricData>
      </TestResults>
     </Phitrics>'
    
    select 
     a.value('@sensor', 'varchar') as Sensor,
     a.value('@unit', 'varchar') as Unit,
     a.value('@testpoint', 'varchar') as Testpoint
    from @xml.nodes('/Phitrics/TestResults/ParametricData/CalibrationDiagnostic/Flow') as b(a)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 2017-08-31
      相关资源
      最近更新 更多