Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 порядковый номер тега в XML  [new]
Maymahh
Guest
Всем привет, есть скрипт

declare @cid xml = 
'<xslw>
	<il>
		<ili>
			<p>10</p> --ParentID
			<c>
				<t>6</t><t>9</t> --ChildID
			</c>	
		</ili>
		<ili>
			
			<c> --No Parent, Unmerge operation
				<t>6</t><t>9</t> --ChildID
			</c>	
		</ili>
	</il>
</xslw>'


select t.c.value('(p)[1]', 'int') as ParentID,
	   i.d.value('.', 'int') as ChildID
from 
    @CID.nodes('/xslw/il/ili') t(c)
    cross apply t.c.nodes('./c/t') i(d)	


на выходе нужно получить порядковый номер для каждого тега ili, то есть должно получиться так
10 6 1
10 9 1
null 6 2
null 9 2


спасибо
15 окт 14, 14:07    [16707398]     Ответить | Цитировать Сообщить модератору
 Re: порядковый номер тега в XML  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Maymahh,

недавно обсуждали, загляните сюда

https://www.sql.ru/forum/1120277-a/kak-garantirovat-poryadok-strok-pri-selekte-iz-xml
15 окт 14, 14:14    [16707471]     Ответить | Цитировать Сообщить модератору
 Re: порядковый номер тега в XML  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
declare @cid xml = 
'<xslw>
	<il>
		<ili>
			<p>10</p> --ParentID
			<c>
				<t>6</t><t>9</t> --ChildID
			</c>	
		</ili>
		<ili>
			
			<c> --No Parent, Unmerge operation
				<t>6</t><t>9</t> --ChildID
			</c>	
		</ili>
	</il>
</xslw>'

select c.value('(../../p)[1]', 'int') as ParentID,
	      c.value('.', 'int') as ChildID,
          c.value('count(for $s in /xslw/il/ili where $s << . return("1"))', 'int') as N_ili,
          c.value('count(for $s in /xslw/il/ili/c/t where $s << . return("1"))', 'int')+1 as N_t
from 
    @CID.nodes('/xslw/il/ili/c/t') t(c)
15 окт 14, 14:24    [16707566]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить