2013-02-08 26 views
0

我有一個有圖像標籤的XML,裏面有12個URL標籤。需要單行結果使用openrowset

我已經寫了這個查詢來從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值逗號分隔。 這怎麼可能。

回答

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)') 
相關問題