2012-03-26 13 views
10

SQL Server sorgulama XML sütundan birden çok satır dönen - her bir takma ad için bir ve aşağıdaki sorguyu denedim:Ben <code>AliasesValue</code> denilen tip <code>XML</code> bir sütununda aşağıdaki verilerin bulunduğu bir tablo <code>RDCAlerts</code> var 2008

SELECT 
    AliasesValue.query('data(/aliases/alias/aliasType)'), 
    AliasesValue.query('data(/aliases/alias/aliasName)'), 
FROM [RdcAlerts] 

ama sadece bir satır böyle döndürür:

Çevrimiçi Kitapları .nodes de

cevap

15

Bak() yöntemi: Birden satırlar döndürülür olsun .nodes() fonksiyonu ile birlikte CROSS APPLY deyimini kullanmak gerekir

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) 
+0

Beauty! Çok teşekkürler, çok takdir ediyorum =) –

+0

Cevabınızı yazmanızdan 5 yıl sonra ... ve sadece sahip olduğum bir sorunu çözmeme yardımcı oldu. Teşekkürler! – PKD

+0

Rica ederim :) –

12

.

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) 
+0

Şerefe, minnettarım ;-) –

İlgili konular