【问题标题】:Select from XML query从 XML 查询中选择
【发布时间】:2020-11-23 03:11:52
【问题描述】:

我正在寻找我不确定引用数组字段的语法。请问有人可以帮助我吗?

【问题讨论】:

    标签: sql-server xml tsql


    【解决方案1】:

    你可以试试这个:

    DECLARE @data XML = '--your--XML--here';
    
    SELECT
        XC.value('(FLD[@NM="TOTAL POLICY PREM"])[1]', 'decimal(16,2)'),
        XC2.value('(./@NM)[1]', 'varchar(50)'),
        XC2.value('(ARRAYVALUE)[2]', 'varchar(20)')
    FROM
        @data.nodes('/POLOUTPUTS') AS XT(XC)
    CROSS APPLY
        xc.nodes('FLDARRAY') AS XT2(XC2)
    WHERE
        XC2.value('(./@NM)[1]', 'varchar(50)') = 'PAY PLAN POLI PREM ARR'
    

    第一个.nodes() 调用返回每个<POLOUTPUTS> 元素的XML 片段列表,您可以从中获取<FLD> 的值和TOTAL POLICY PREM 属性值。

    第二个嵌套的.nodes() 调用返回<POLOUTPUTS> 元素内每个<FLDARRAY> 元素的XML 片段列表 - 并且从中可以获取NM 属性的值(用于在WHERE 子句),以及其中第二个 <ARRAYVALUE> 元素的值。

    【讨论】:

      【解决方案2】:
      declare @x xml = N'<POLOUTPUTS>
            <FLD NM="MAXIMUM DRIVER AGE">43.59</FLD>
      ............
            <FLD NM="RED MOUNTAIN SCORE MAX">735</FLD>
            <FLD NM="TOTAL POLICY PREM">1678.37</FLD>
            <FLD NM="VEH MIN BI IND" />
            <FLDARRAY NM="PAY PLAN DESCR ARR">
      .............
              <ARRAYVALUE>0</ARRAYVALUE>
            </FLDARRAY>
            <FLDARRAY NM="PAY PLAN POLI PREM ARR">
              <ARRAYVALUE>1678.37</ARRAYVALUE>
              <ARRAYVALUE>1621.54</ARRAYVALUE>
              <ARRAYVALUE>1635.74</ARRAYVALUE>
      ...............
              <ARRAYVALUE>0</ARRAYVALUE>
          </FLDARRAY>
      </POLOUTPUTS>'
      
      
      select 
          @x.value('(POLOUTPUTS/FLD[@NM="TOTAL POLICY PREM"])[1]', 'decimal(9,2)'),
          @x.value('(POLOUTPUTS/FLDARRAY[@NM="PAY PLAN POLI PREM ARR"]/ARRAYVALUE[2])[1]', 'decimal(9,2)');
      

      【讨论】:

      • 我很感激。谢谢。
      猜你喜欢
      • 2021-01-21
      • 1970-01-01
      • 2017-08-28
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多