numer, lp. bloku w xml

0

Mam xml

 
<conditions>
  <andBlock>
    <condition>
      <field>Name</field>
      <relation>=</relation>
      <value>Jan</value>
    </condition>
    <condition>
      <field>Date</field>
      <relation>!=</relation>
      <value>2013-07-11</value>
    </condition>
  </andBlock>
  <andBlock>
    <condition>
      <field>Owner</field>
      <relation>=</relation>
      <value>55</value>
    </condition>
  </andBlock>
</conditions>

Chciałbym dane z tego xml umieścić w zmiennej tabelarycznej

declare @conditions table ([field] varchar(20), rel varchar(2), val nvarchar(260), block int)

insert into @conditions
SELECT 
	T.X.value('field[1]', 'varchar(20)'),
	T.X.value('relation[1]', 'varchar(2)'),
	T.X.value('value[1]', 'nvarchar(260)'),
        1 -- ???
FROM @conditionsXml.nodes('conditions/andBlock/condition') T(X)
 

czyli w wyniku chciałbym tabelę z następującymi danymi

field rel val block
Name = Jan 1
Date != 2013-07-11 1
Owner = 55 2

Jak "odkryć" numer porządkowy andBlock?

1

To sobie i potomnym odpowiem:

 
select 
	x.value('field[1]', 'varchar(20)'),
	x.value('relation[1]', 'varchar(2)'),
	x.value('value[1]', 'nvarchar(260)'),
	block
from
(
	SELECT X.query('./condition') as xmlBlock, ROW_NUMBER() over(order by (select 0)) as block
	FROM @conditionsXml.nodes('conditions/andBlock') T(x)
) as tab
cross apply xmlBlock.nodes('condition') as T(x)

podzapytanie wybiera bloki i je numeruje, a dopiero nadrzeędne zapytanie wyciąga każdy condition

1 użytkowników online, w tym zalogowanych: 0, gości: 1