如何使用XQuery从XML中提取值列表?

时间:2012-06-08 12:30:02

标签: sql sql-server-2008

我有

下的XQuery
DECLARE @x XML
SELECT @x = '<PartnerEmails>
<Email>a@xxxx.com</Email>
<Email>b@xxxx.com</Email>
</PartnerEmails>'
SELECT @x.query('data(PartnerEmails/Email)').value('.','varchar(100)') AS Val

实际输出:

Val
a@xxxx.com b@xxxx.com

预期输出

a@xxxx.com
b@xxxx.com

即。在两个不同的行中。

怎么做?

2 个答案:

答案 0 :(得分:4)

使用此:

SELECT 
    node.value('.','varchar(100)') AS Val
FROM
    @x.nodes('/PartnerEmails/Email') AS PE(Node)    

由于<PartnerEmails>内有多个节点,因此需要使用.nodes()函数创建XML片段的“内联”表 - 该表中的每个“行”包含一个<Email>然后可以查询的节点(并提取XML节点的内容)。

答案 1 :(得分:1)

DECLARE @x XML
SELECT @x = '<PartnerEmails>
<Email>a@xxxx.com</Email>
<Email>b@xxxx.com</Email>
</PartnerEmails>'

SELECT   ColumnValue.value('.','varchar(1000)')  as Val            
FROM @x.nodes('/PartnerEmails/Email') as Table1(ColumnValue)