我从数据库中选择下面的 XML。
在此 xml 中,我想选择节点内存在特定值的节点。 例如:
在 XML 中,我搜索 de 节点 ArtNr = 209232 的节点 如果值存在则查询必须返回节点内的值和节点内的值 (CP 01 粉丝和 1.0000000000)
为了检查 ArtNr 是否存在,我在 where 子句中使用以下命令
<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>
您的 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 |