Lesen von XML in SQL, die eine bis viele Kombination hat

Siehe unten Beispiel, wo ich versuche, Ergebnis als 2 Zeilen mit dem gleichen ClaimNo mit verschiedenen AliasType und AliasName zu erhalten.

Das aktuelle Ergebnis sieht so aus – geben Sie hier die imagebeschreibung ein

DECLARE @r TABLE (AliasesValue XML) INSERT INTO @r SELECT '<aliases> <ClaimsNotificationAddRq><Claim><ClaimNo>123</ClaimNo> <alias> <aliasType>AKA</aliasType> <aliasName>Pramod Singh</aliasName> </alias> <alias> <aliasType>AKA</aliasType> <aliasName>Bijoy Bora</aliasName> </alias></Claim></ClaimsNotificationAddRq> </aliases> ' SELECT c.query('data(Claim/ClaimNo)'), c.query('data(Claim/alias/aliasType)'), c.query('data(Claim/alias/aliasName)') FROM @rr CROSS APPLY AliasesValue.nodes('aliases/ClaimsNotificationAddRq') x(c) 

Versuchen Sie es so

 DECLARE @r TABLE (AliasesValue XML) INSERT INTO @r SELECT '<aliases> <ClaimsNotificationAddRq> <Claim> <ClaimNo>123</ClaimNo> <alias> <aliasType>AKA</aliasType> <aliasName>Pramod Singh</aliasName> </alias> <alias> <aliasType>AKA</aliasType> <aliasName>Bijoy Bora</aliasName> </alias> </Claim> </ClaimsNotificationAddRq> </aliases>'; SELECT c.value('(ClaimNo)[1]','int') AS ClaimNo ,a.value('(aliasType)[1]','nvarchar(max)') AS AliasType ,a.value('(aliasName)[1]','nvarchar(max)') AS AliasName FROM @rr CROSS APPLY AliasesValue.nodes('/aliases/ClaimsNotificationAddRq/Claim') x(c) CROSS APPLY c.nodes('alias') AS y(a) 

Das Ergebnis

 123 AKA Pramod Singh 123 AKA Bijoy Bora 

Der erste Aufruf von .nodes() bekommt man auf der Ebene von einem <Claim> . Der zweite Aufruf erhält alle <alias> -Nodes unterhalb des aktuellen <Claim> -Elementes.