0

我有一个带有图像标签的 xml,其中有 12 个 URL 标签。

我已经编写了这个查询来从 xml 中获取结果。

酒店.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 rows 。我需要用逗号分隔 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 回答