T-SQL,从列中的xml获取值

Posted

技术标签:

【中文标题】T-SQL,从列中的xml获取值【英文标题】:T-SQL, get value from xml in a column 【发布时间】:2022-01-14 10:20:33 【问题描述】:

我有一个带有 XML 列 (xmlCol) 的表,我正在尝试从中查询一个值。

这是 xml。

<criteria>
  <factor name="Rivers" title="Rivers">
    <value dataType="Int32" value="1743" description="Wilson0" />
  </factor>
  <factor name="OptionalAffProperties" title="Include properties">
    <value dataType="String" value="FishingModel" description="Fishing Model" />
  </factor>
</criteria>

这是获取列的选择。从 MyTable 中选择 xmlCol

我正在尝试将值 1743 返回到名为 RiverID 的列。

迈克

【问题讨论】:

【参考方案1】:

这应该可行:

SELECT
    xmlCol.value('(//factor[@name="Rivers"]/value/@value)[1]', 'int') As RiverID
FROM
    MyTable

value() Method (xml Data Type) - SQL Server | Microsoft DocsXQuery Language Reference (SQL Server) - SQL Server | Microsoft Docs

【讨论】:

仅供参考,您在@name="Rivers 上缺少一个结束双引号。编辑队列已满,否则我会为您添加它。 @Austin 好地方!固定。 别担心!我没有意识到你可以这样格式化路径,所以我也很感激! /criteria/factor 会比//factor【参考方案2】:

要获取属性值,可以这样查询:

select xmlCol.value('(/criteria/factor/value/@value)[1]', 'int') RiverID
from MyTable

您提供要查找的记录的 xml 路径:(/criteria/factor/value

然后是你需要的属性:/@value)[1]

【讨论】:

以上是关于T-SQL,从列中的xml获取值的主要内容,如果未能解决你的问题,请参考以下文章

从列中获取值并根据值是不是正确显示该行中的所有内容(LINQ - c# web API)

Rails:如何从列中获取唯一值

在JavaScript / jQuery中从列中获取所有值而不重复

从列中的最大 id 创建 HSQL 序列

如何从列中的多条记录中仅选择 3 条记录?

从列中的字符串中提取每行的最大值