Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLServer2008中查询XML列返回多行_Sql_Xml_Sql Server 2008_Tsql - Fatal编程技术网

在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)