デモンストレーションのために、テーブル変数を使用しました。標準テーブルを使用するには、@tempTable
宣言を削除してステートメントを挿入します。@tempTable
次に、参照をテーブル名に 置き換えます。
declare @childId int
set @childId = 184
declare @tempTable table(parent int, child int)
insert into @tempTable values(190, 192)
insert into @tempTable values(192, 180)
insert into @tempTable values(180, 185)
insert into @tempTable values(185, 184)
insert into @tempTable values(190, 191)
insert into @tempTable values(191, 197)
insert into @tempTable values(197, 200)
declare @currentItem int
set @currentItem = @childId
declare @output varchar(max)
set @output = cast(@currentItem as varchar)
while (exists(select 1 from @tempTable where child = @currentItem))
begin
select
@currentItem = parent
from
@tempTable
where
child = @currentItem
set @output = cast(@currentItem as varchar) + ', ' + @output
end
select @output
出力例:
184 の場合:190, 192, 180, 165, 184
200 の場合:190, 191, 197, 200