2

データを XML としてクエリできるように、文字列を XML データ型に変換するにはどうすればよいですか。

例(このための元のSQLを提供した「mellamokb the Wise」に感謝)

以下のコードは、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)
4

1 に答える 1

5

あなたは1つの追加のクロスアプライでそれをキャストすることができます。

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フィドル

XMLへのキャストでパフォーマンスの問題が発生する可能性があります。この答えこの答えを見てください

于 2013-02-28T13:20:59.647 に答える