首页 >数据库 >mysql教程 >如何在 SQL Server 中查询 XML 列中的值?

如何在 SQL Server 中查询 XML 列中的值?

DDD
DDD原创
2025-01-13 12:08:44971浏览

How to Query Values within XML Columns in SQL Server?

访问 SQL Server 的 XML 列中的数据

SQL Server 允许将 XML 数据存储在定义为 XML 数据类型的列中。 从这些列中检索特定数据需要专门的查询。

假设您有一个名为“Roles”的 XML 列,其结构如下:

<code class="language-xml"><root><role>Alpha</role><role>Beta</role><role>Gamma</role></root></code>

要查找包含特定角色的行,请使用以下查询:

<code class="language-sql">SELECT
  Roles
FROM
  MyTable
WHERE
  Roles.value('(/root/role)[1]', 'varchar(max)') LIKE 'StringToSearchFor'</code>

这使用 Roles.value 提取第一个 role 元素的值,并将其转换为 varchar(max)。 这使得可以搜索特定角色。

如果您的列还不是 XML 数据类型,请在查询之前使用 CAST 进行转换。

查询还可以针对 XML 属性。 例如,在“数据”列中使用此 XML:

<code class="language-xml"><utilities.codesystems.codesystemcodes ....="" code="0001F" codesystem="2" codetags="-19-" iid="107"></utilities.codesystems.codesystemcodes></code>

要获取 CodeSystem 为“2”的行:

<code class="language-sql">SELECT
  [data]
FROM
  [dbo].[CodeSystemCodes_data]
WHERE
  CAST([data] AS XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'</code>

有关 T-SQL 中更高级的 XML 查询,请参阅:

或者,CROSS APPLY 为搜索多个“角色”元素提供了更大的灵活性:

<code class="language-sql">SELECT *
FROM
(
    SELECT
        pref.value('(text())[1]', 'varchar(32)') AS RoleName
    FROM
        MyTable
    CROSS APPLY
        Roles.nodes('/root/role') AS Roles(pref)
) AS Result
WHERE
    RoleName LIKE '%ga%'</code>

这种方法可以更高效、更有针对性地从 SQL Server 中的 XML 列中提取数据。

以上是如何在 SQL Server 中查询 XML 列中的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn