在SQLServer2008中查询XML列返回多行
我有一个名为在SQLServer2008中查询XML列返回多行,sql,xml,sql-server-2008,tsql,Sql,Xml,Sql Server 2008,Tsql,我有一个名为AliasesValue的表RDCAlerts,在类型为XML的列中包含以下数据: <aliases> <alias> <aliasType>AKA</aliasType> <aliasName>Pramod Singh</aliasName> </alias> <alias> <aliasType>AKA</aliasType>
AliasesValue
的表RDCAlerts
,在类型为XML
的列中包含以下数据:
<aliases>
<alias>
<aliasType>AKA</aliasType>
<aliasName>Pramod Singh</aliasName>
</alias>
<alias>
<aliasType>AKA</aliasType>
<aliasName>Bijoy Bora</aliasName>
</alias>
</aliases>
但它只返回一行,如下所示:
AKA AKA | Pramod Singh Bijoy Bora
查看联机丛书中的.nodes()方法:
DECLARE @r TABLE (AliasesValue XML)
INSERT INTO @r
SELECT '<aliases> <alias> <aliasType>AKA</aliasType> <aliasName>Pramod Singh</aliasName> </alias> <alias> <aliasType>AKA</aliasType> <aliasName>Bijoy Bora</aliasName> </alias> </aliases> '
SELECT c.query('data(aliasType)'), c.query('data(aliasName)')
FROM @r r CROSS APPLY AliasesValue.nodes('aliases/alias') x(c)
DECLARE@r表(别名值XML)
插入@r
选择“AKA Pramod Singh AKA Bijoy Bora”
选择c.query('data(别名类型)')、c.query('data(别名名称)'))
从@r交叉应用别名value.nodes('alias/alias')x(c)
您需要使用交叉应用
语句和.nodes()
函数来返回多行
select
a.alias.value('(aliasType/text())[1]', 'varchar(20)') as 'aliasType',
a.alias.value('(aliasName/text())[1]', 'varchar(20)') as 'aliasName'
from
RDCAlerts r
cross apply r.AliasesValue.nodes('/aliases/alias') a(alias)
美女非常感谢,非常感谢=)这是5年后,你写了你的答案。。。它帮我解决了一个问题。谢谢不断赠送的礼物!
select
a.alias.value('(aliasType/text())[1]', 'varchar(20)') as 'aliasType',
a.alias.value('(aliasName/text())[1]', 'varchar(20)') as 'aliasName'
from
RDCAlerts r
cross apply r.AliasesValue.nodes('/aliases/alias') a(alias)