【问题标题】:Single attribute value XML extract from SQL Server with xpath使用 xpath 从 SQL Server 提取单个属性值 XML
【发布时间】:2019-04-20 01:44:28
【问题描述】:

我有以下 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 中预期的第一个节点。

【问题讨论】:

  • 不,没有“捷径”或任何可以做到这一点的方法——这“进入”XML 结构并提取单个节点值的方式

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


【解决方案1】:

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

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

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

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

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

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

db<>fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多