我有
下的XQueryDECLARE @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
即。在两个不同的行中。
怎么做?
答案 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)