0

画像タグを持つxmlがあり、この中に12個のURLタグがあります。

xml から結果を取得するために、このクエリを作成しました。

Hotel.xml ファイル:

<images>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
  <url></url>
 </images>

これが私のコードです:

CREATE  TABLE #WorkingTable ( Data XML )
INSERT  INTO #WorkingTable
        SELECT  *
        FROM    OPENROWSET(BULK 'd:\hotels.xml', SINGLE_BLOB) AS data


DECLARE @XML AS XML ,
    @hDoc AS INT

SELECT  @XML = Data
FROM    #WorkingTable


EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML


declare @tmp varchar(MAX)
SET @tmp = ''

SELECT  pref.value('(hotel_ref/text())[1]','varchar(400)')AS hotel_ref,  
sref.value('(text())[1]', 'varchar(400)')+ ';' 
FROM        #WorkingTable CROSS APPLY
  Data.nodes('//hotels/hotel') AS hotel(pref)
  CROSS APPLY
  pref.nodes('images/url') AS images(sref) 


EXEC sp_xml_removedocument @hDoc

DROP TABLE #WorkingTable

私の問題は、 12 行を返すことです。URL 値をカンマ区切りにする必要があります。どのようにそれが可能です。

4

1 に答える 1

0

一時テーブルは必要なく、への呼び出しも必要ありませんsp_xml*

このように XML をロードします。

declare @XML xml
set @XML = 
  (
  select *
  from openrowset(bulk 'd:\hotels.xml', single_blob) as data  
  )

提供された XML は、使用しているクエリと一致しません。
これは、質問の XML を使用してコンマ区切りの文字列を作成するものです。

select
  (
  select ', '+T.N.value('text()[1]', 'varchar(400)')
  from @XML.nodes('images/url') as T(N)
  for xml path(''), type
  ).value('substring(text()[1], 3)', 'varchar(max)')
于 2013-02-08T13:39:34.280 に答える