Рекурсия в SQL до SQL 2003 (то есть в SQL Server 2000) выглядит несколько уродливо; для каждого уровня в вашем дереве вам нужно написать отдельный оператор соединения обратно в исходную таблицу. При условии, что количество уровней в вашей иерархии фиксировано, вы можете написать что-то вроде этого.
create table #Hell (
parent int,
id int,
name varchar(30)
)
insert into #Hell values (NULL, 1, 'The Boss')
insert into #Hell values (1, 2, 'The Boss'' PA')
insert into #Hell values (1, 3, 'Production Director')
insert into #Hell values (3, 4, 'Jim''l Fixit')
select * from #Hell H1
inner join #Hell H2
ON H1.id=H2.parent
inner join #Hell H3
ON H2.id=H3.parent
WHERE H3.Id=4 --Find the boss for Jim
drop table #Hell
К счастью, SQL Server 2005 имеет с общим табличным выражением, которое позволяет довольно легко писать рекурсивные операции. Смотри Смотри http://www.4guysfromrolla.com/webtech/071906-1.shtml
Вам также следует знать о различных способах представления деревьев в базе данных. Посмотрите слайды на деревьях в SQL из этой презентации http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back