使用xpath从SQL Server中提取单个属性值XML

时间:2019-04-20 01:44:28

标签: sql-server xml sql-server-2012

我将以下XML存储在SQL Server 2012表的xml列中。

<Values>
  <V ID="MyValue1" Value="True" />
  <V ID="MyValue2" Value="False" />
</Values>

我正在尝试从ID为“ MyValue1”的节点获取Value作为XML的布尔值。经过一番搜索和一些SQL xml错误,我最终得到了这个结果:

SELECT ID, [Values],
  [Values].value('data(/Values/V[@ID="MyValue1"]/@Value)[1]', 'bit') AS MyBool
FROM [MyXmlValues]

这似乎有点疯狂。是否没有更简单的方法(例如,没有数据部分)通过XPath查询单个值?

StackOverflow上的大多数问题和示例都使用[1]来指示该节点,但是我不确定我的节点是XML所期望的第一个节点。

1 个答案:

答案 0 :(得分:1)

您不需要data()。您可以使用

(/Values/V[@ID="MyValue2"]/@Value)[1]'

如果您希望更多的节点具有要搜索的ID,并希望它们具有第一个属性值(即,具有该属性的第一个节点中的属性值,或者

(/Values/V[@ID="MyValue2"])[1]/@Value'

如果要选择具有ID的第一个节点并获取其属性值,而不论是否设置了该值。

如果只有一个节点可以拥有该ID,这似乎是合理的,则没有区别。

db<>fiddle