使用openrowset需要单行结果

时间:2013-02-08 10:29:41

标签: sql-server-2008 stored-procedures openxml openrowset

我有一个带有图片标记的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值为逗号分隔。 怎么可能。

1 个答案:

答案 0 :(得分: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)')