1

请参见下面的示例,其中我试图将结果作为 2 行具有相同的 ClaimNo 和不同的 aliasType 和 aliasName。

当前结果如下所示 - 在此处输入图像描述

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 @r r CROSS APPLY AliasesValue.nodes('aliases/ClaimsNotificationAddRq') x(c)
4

1 回答 1

0

像这样试试

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 @r r 
CROSS APPLY AliasesValue.nodes('/aliases/ClaimsNotificationAddRq/Claim') x(c)
CROSS APPLY c.nodes('alias') AS y(a)

结果

123 AKA Pramod Singh
123 AKA Bijoy Bora

第一次调用 to.nodes()让你达到 one 的水平<Claim>。第二次调用将获得<alias>当前元素下的所有节点<Claim>

于 2016-10-05T08:20:02.667 回答