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