访问 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中文网其他相关文章!