0

私の SQL Server テーブルでは、1 つの列のデータ型が 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>

クエリを使用して name1、name2、name3 を取得しています。

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

このデータをループしてすべての名前を取得するにはどうすればよいですか。何かのようなもの:

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

また、同じ XML をループしてすべての値を取得する方法は?

4

1 に答える 1