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

Flo*_*eft 2 xml t-sql sql-server

如何将字符串转换为 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)
Run Code Online (Sandbox Code Playgroud)

但是,如果 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)
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 5

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

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)
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

转换为 XML 可能存在性能问题。看看这个答案这个答案