2

我有一个 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

即在两个不同的行中。

怎么做?

4

2 回答 2

4

用这个:

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

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

于 2012-06-08T12:53:13.293 回答
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) 
于 2012-06-08T13:04:57.577 回答