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

3 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
Run Code Online (Sandbox Code Playgroud)

实际输出:

Val
a@xxxx.com b@xxxx.com
Run Code Online (Sandbox Code Playgroud)

预期输出

a@xxxx.com
b@xxxx.com
Run Code Online (Sandbox Code Playgroud)

即在两个不同的行中。

怎么办呢?

mar*_*c_s 5

用这个:

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

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