sql-server - 在 T-SQL 中查询之前将字符串转换为 XML 数据类型

标签 sql-server xml t-sql

如何将字符串转换为 XML 数据类型,以便可以以 XML 形式查询数据:

例如(感谢“mellamokb the Wise”为此提供了原始 SQL)

如果 xmlstring 是 XML 类型,下面的代码可以正常工作(请参阅 DEMO )

select id, name
from Data
cross apply (
  select Destination.value('data(@Name)', 'varchar(50)') as name
  from [xmlstring].nodes('/Holidays/Summer/Regions/Destinations/Destination') D(Destination)
) Destinations(Name)

但是,如果 xmlString 的类型为 varchar,即使我将字符串转换为 XML ( DEMO ),我也会收到错误:

select id, name
from Data
  cross apply (
  select Destination.value('data(@Name)', 'varchar(50)') as name
  from CONVERT(xml,[xmlstring]).nodes('/Holidays/Summer/Regions/Destinations/Destination') D(Destination)
) Destinations(Name)

最佳答案

您可以在一次额外的交叉应用中进行转换。

select id,
       T.N.value('@Name', 'varchar(50)') as name
from Data
cross apply (select cast(xmlstring as xml)) as X(X)
cross apply X.X.nodes('/Holidays/Summer/Regions/Destinations/Destination') T(N)

SQL Fiddle

转换为 XML 可能会出现性能问题。看看this answerthis answer

关于sql-server - 在 T-SQL 中查询之前将字符串转换为 XML 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136345/

相关文章:

sql-server - 使用包含的列创建索引时出现问题 (SQL Server Express)

sql - vb.net中使用oledb获取sql server print语句的值

asp.net - MSBuild 脚本和 VS2010 发布应用 Web.config 转换

sql-server - 使用动态 T-SQL 将数据类型 nvarchar 转换为 float 时出错

sql-server - Azure 中的 SSIS 跨 DB "WHERE IN"子句(或等效项)

SQL - 如何根据最后输入的值删除重复的行?

javascript - 我如何在 JavaScript 中循环遍历 XML 节点?

php - 将 XML 导入 MySQL,无法获取所有子标签

sql-server - 可以选择向结果表中添加新字段吗?

sql - WHERE 使用 CASE 过滤不同的值