Hug*_*rte 15 xml sql t-sql sql-server-2008
我RDCAlerts
在一个XML
名为的列中有一个包含以下数据的表AliasesValue
:
<aliases>
<alias>
<aliasType>AKA</aliasType>
<aliasName>Pramod Singh</aliasName>
</alias>
<alias>
<aliasType>AKA</aliasType>
<aliasName>Bijoy Bora</aliasName>
</alias>
</aliases>
Run Code Online (Sandbox Code Playgroud)
我想创建一个返回两行的查询 - 每个别名一个,我尝试了以下查询:
SELECT
AliasesValue.query('data(/aliases/alias/aliasType)'),
AliasesValue.query('data(/aliases/alias/aliasName)'),
FROM [RdcAlerts]
Run Code Online (Sandbox Code Playgroud)
但它只返回一行,如下所示:
AKA AKA | Pramod Singh Bijoy Bora
Run Code Online (Sandbox Code Playgroud)
Stu*_*rth 22
查看联机丛书中的.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)
Run Code Online (Sandbox Code Playgroud)
Der*_*omm 17
您需要将该CROSS APPLY
语句与.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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31611 次 |
最近记录: |