对于以下XML:
<property name="jboss.as.jpa.providerModule" value="org.hibernate:5.2.4.Final" />
如何使用Sql server查询根据Attribute中的条目检索Value标记的内容。 如果属性是assets,则值应为5000.
答案 0 :(得分:0)
尝试这样
DECLARE @xml XML=
N'<SheetData>
<Finance>
<value>1000</value>
<Currency>USD</Currency>
<Attribute>Sales</Attribute>
</Finance>
<Finance>
<value>5000</value>
<Currency>USD</Currency>
<Attribute>Assets</Attribute>
</Finance>
</SheetData>';
DECLARE @attr VARCHAR(100)='Assets';
SELECT @xml.value('(/SheetData/Finance[Attribute=sql:variable("@attr")]/value/text())[1]','int')
您阅读XPath
如下:
从SheetData
开始,向下导航至Finance
。搜索节点,其中<Attribute>
与给定变量类似,并从那里读取value
的文本。
您的第二个示例(在评论中)再添加一个嵌套级别Component
:
declare @xml xml=
'<SheetData>
<Finance>
<value>1000</value>
<GeoCurr>
<Currency>USD</Currency>
</GeoCurr>
<Component>
<Attribute>Sales</Attribute>
</Component>
</Finance>
<Finance>
<value>5000</value>
<GeoCurr>
<Currency>USD</Currency>
</GeoCurr>
<Component>
<Attribute>Assets</Attribute>
</Component>
</Finance>
</SheetData>';
DECLARE @attr VARCHAR(100)='Assets';
SELECT @xml.value('(/SheetData/Finance[Component/Attribute=sql:variable("@attr")]/value/text())[1]','int')