[英]Sql Server 2008 Shredding XML
嗨我有这样的XML ...
<Questions>
<Question1>A</Question1>
<Question2>B</Question2>
<Question3>C</Question3>
</Questions>
我想回A,B,C。 我见过一些类似的问题,但那些具有相同的重复节点名称。 不幸的是,在这个阶段我无法改变它。 我玩过AGES的SQL Xpath语法,没有运气。 我可以获得整个问题节点,但理想情况下我想要实际数据。 多个返回的行也可以。
任何帮助将不胜感激。
更新 - 基里尔的答案非常接近,除了我在表中有超过1条记录并且它返回1行内的所有记录数据。 如果我能实现一个完美的row / xml文件! 通过从该记录输出另一个字段,例如rownum或从文件输出另一个数据,例如ProfileName ..
谢谢,
阿德里安!
declare @x xml = N'<Questions>
<Question1>A</Question1>
<Question2>B</Question2>
<Question3>C</Question3>
</Questions>
'
SELECT x.value('.','varchar(10)')
FROM @x.nodes('/Questions/*') x(x)
产量
----------
A
B
C
继续对马丁的解决方案,并与一些灵感此 :
declare @x xml = N'<Questions>
<Question1>A</Question1>
<Question2>B</Question2>
<Question3>C</Question3>
</Questions>
'
DECLARE @Questions VARCHAR(MAX)
SELECT @Questions = COALESCE(@Questions + ', ', '') + Question
FROM (
SELECT x.value('.','varchar(10)') as Question
FROM @x.nodes('/Questions/*') x(x)
) as y
SELECT @Questions
输出:
A, B, C
采用:
declare @x xml ='
<Questions>
<Question1>A</Question1>
<Question2>B</Question2>
<Question3>C</Question3>
</Questions>'
select @x.value('(/*/Question1)[1]', 'nvarchar(max)')
, @x.value('(/*/Question2)[1]', 'nvarchar(max)')
, @x.value('(/*/Question3)[1]', 'nvarchar(max)')
输出:
---- ---- ----
A B C
select stuff(
(
select ',' + x.value('.', 'varchar(10)') [text()]
from @x.nodes('/*/*') x(x)
for xml path(''))
, 1, 1, '')
输出:
A,B,C
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.