SQL XML XQuery разбивает на полностью инкапсулированные отдельные строки - PullRequest
0 голосов
/ 25 февраля 2019

Я не могу обработать запрос, который возвращает полностью инкапсулированный измельченный xml.

Это очень сблизит меня, но будет отсутствовать родительский узел и все, что находится на втором уровне (L1ID, L1Name)

drop table #temp

Declare @xmlContent xml

set @xmlContent = cast('<Jobs><L1ID>151</L1ID><L1Name>Roles</L1Name><L1Data><L2ID>17</L2ID> 
<L2Name>Advisor</L2Name><L2Data><L3ID>1</L3ID><L3Name>Advise stuff</L3Name></L2Data></L1Data><L1Data>
<L2ID>18</L2ID><L2Name>Carpentor</L2Name><L2Data><L3ID>2</L3ID><L3Name>Carpentor stuff</L3Name> 
</L2Data></L1Data><L1Data><L2ID>18</L2ID><L2Name>Laborer</L2Name><L2Data><L3ID>5</L3ID>
<L3Name>Laborer stuff</L3Name></L2Data></L1Data></Jobs>' as XML)

Select @xmlContent as xmlContent 
into #temp

SELECT 
    c.query('.')
FROM 
    #temp
CROSS APPLY 
    xmlcontent.nodes('/Jobs/L1Data') as T (C)

Оригинальный XML

<Jobs>
  <L1ID>151</L1ID>
  <L1Name>Roles</L1Name>
  <L1Data>
    <L2ID>17</L2ID>
    <L2Name>Advisor</L2Name>
    <L2Data>
      <L3ID>1</L3ID>
      <L3Name>Advise stuff</L3Name>
    </L2Data>
  </L1Data>
  <L1Data>
    <L2ID>18</L2ID>
    <L2Name>Carpentor</L2Name>
    <L2Data>
      <L3ID>2</L3ID>
      <L3Name>Carpentor stuff</L3Name>
    </L2Data>
  </L1Data>
  <L1Data>
    <L2ID>18</L2ID>
    <L2Name>Laborer</L2Name>
    <L2Data>
      <L3ID>5</L3ID>
      <L3Name>Laborer stuff</L3Name>
    </L2Data>
  </L1Data>
</Jobs>

Требуемый набор результатов (возвращенные строки)

Row 1
<Jobs>                                                   --<-- Required but missing
  <L1ID>151</L1ID>                                       --<-- Required but missing
  <L1Name>Roles</L1Name>                                 --<-- Required but missing
  <L1Data>
    <L2ID>17</L2ID>
    <L2Name>Advisor</L2Name>
    <L2Data>
      <L3ID>1</L3ID>
      <L3Name>Advise stuff</L3Name>
    </L2Data>
  </L1Data>
</Jobs>

Row 2
<Jobs>
  <L1Data>
    <L2ID>18</L2ID>
    <L2Name>Carpentor</L2Name>
    <L2Data>
      <L3ID>2</L3ID>
      <L3Name>Carpentor stuff</L3Name>
    </L2Data>
  </L1Data>
</Jobs>

Row 3    
<Jobs>
  <L1Data>
    <L2ID>18</L2ID>
    <L2Name>Laborer</L2Name>
    <L2Data>
      <L3ID>5</L3ID>
      <L3Name>Laborer stuff</L3Name>
    </L2Data>
  </L1Data>
</Jobs>
...