Mssql xml获取节点中存在值的节点

问题描述 投票:0回答:1

我从数据库中选择下面的 XML。

在此 xml 中,我想选择节点内存在特定值的节点。 例如:

在 XML 中,我搜索 de 节点 ArtNr = 209232 的节点 如果值存在则查询必须返回节点内的值和节点内的值 (CP 01 粉丝和 1.0000000000)

为了检查 ArtNr 是否存在,我在 where 子句中使用以下命令

  • info_TOL_ArticleList.exist('(/:LIST/:ELEMENTS/:TOL_Article/:fields/:ArtNr[.="209232"])') = 1
<LIST>
  <ELEMENTS>
    <TOL_Article>
      <fields>
        <ArtDesc>Looprooster L1100xW1100x2mm Mesh 33,33x33,33</ArtDesc>
        <ArtNr>515021111</ArtNr>
        <BasePrice>153.7500</BasePrice>
        <Qty>3.0000000000</Qty>
        <Sort />
        <Unit>st</Unit>
      </fields>
    </TOL_Article>
    <TOL_Article>
      <fields>
        <ArtDesc>FP Box</ArtDesc>
        <ArtNr>595224</ArtNr>
        <BasePrice>100.0000</BasePrice>
        <Qty>5.0000000000</Qty>
        <Sort />
        <Unit>st</Unit>
      </fields>
    </TOL_Article>
    <TOL_Article>
      <fields>
        <ArtDesc>Cable assembly Fused</ArtDesc>
        <ArtNr>595225</ArtNr>
        <BasePrice>110.0000</BasePrice>
        <Qty>5.0000000000</Qty>
        <Sort />
        <Unit>st</Unit>
      </fields>
    </TOL_Article>
    <TOL_Article>
      <fields>
        <ArtDesc>CP 01 Fans</ArtDesc>
        <ArtNr>209232</ArtNr>
        <BasePrice>4300.0000</BasePrice>
        <Qty>1.0000000000</Qty>
        <Sort />
        <Unit>st</Unit>
      </fields>
    </TOL_Article>
  </ELEMENTS>
</LIST>
sql sql-server xml
1个回答
0
投票

您的 xml 没有任何命名空间,因此在未定义命名空间的情况下在 xpath 中使用

:
将导致错误。

更正确的是:

info_TOL_ArticleList.exist('/LIST/ELEMENTS/TOL_Article[fields/ArtNr="209232"]') = 1

SELECT
    info_TOL_ArticleList.value('(/LIST/ELEMENTS/TOL_Article[fields/ArtNr="209232"]/fields/ArtDesc)[1]', 'NVARCHAR(255)') AS ArtDesc,
    info_TOL_ArticleList.value('(/LIST/ELEMENTS/TOL_Article[fields/ArtNr="209232"]/fields/Qty)[1]', 'DECIMAL(18,10)') AS Qty
FROM
    XML_DATA
WHERE
    info_TOL_ArticleList.exist('/LIST/ELEMENTS/TOL_Article[fields/ArtNr="209232"]') = 1;

输出:

艺术描述 数量
CP 01 粉丝 1.0000000000

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.