В моей SQL таблице серверов один столбец имеет тип данных XML. Он содержит данные в виде:
<P1>
<P2>
<P3 name='[1] name1', value='val1'> </P3>
<P3 name='[2] name2', value='val2'> </P3>
<P3 name='[3] name3', value='val3'> </P3>
</P2>
</p1>
Я выбираю имя1, имя2, имя3, используя запрос:
select top(1)
col.value('(/P1[1]/P2[1]/P3/@name)[1]', 'VARCHAR(max)') as q1,
col.value('(/P1[1]/P2[1]/P3/@name)[2]', 'VARCHAR(max)') as q2,
col.value('(/P1[1]/P2[1]/P3/@name)[3]', 'VARCHAR(max)') as q3,
FROM table
Как я могу l oop на эти данные, чтобы получить все имена. Что-то вроде:
declare @x=1
while @x<4:
begin
select top(1)
col.value('(/P1[1]/P2[1]/P3/@name)[@x]', 'VARCHAR(max)') as q@x
from table
set @x=@x+1
end
Также как l oop на том же XML, чтобы получить все значения?