У меня есть следующая таблица в базе данных SQL Server 2008:
Id Name ParentFolder
-- ---- ------------
1 Europe NULL
2 Asia NULL
3 Germany 1
4 UK 1
5 China 2
6 India 2
7 Scotland 4
ParentFolder - это идентификатор FK to Id в той же таблице. Я хотел бы создать представление, которое приводит к чему-то вроде этого:
Id Name FullName
-- ---- --------
1 Europe Europe
2 Asia Asia
3 Germany Europe/Germany
4 UK Europe/UK
5 China Asia/China
6 India Asia/India
7 Scotland Europe/UK/Scotland
Как видите, мне нужно построить значения FullName путем рекурсивного использования отношения ParentFolder произвольное количество раз, пока не будет найден NULL.
Редактировать. Каждая строка в таблице «знает», какая другая строка является ее родителем, но не знает своей абсолютной позиции в иерархии. По этой причине система родословной, где каждая строка хранит свое абсолютное местоположение в дереве иерархии, не подходит.
Мне известна функция иерархии в SQL Server 2008, но, насколько мне известно, она работает только с фиксированным числом уровней рекурсии. В моем случае, однако, вы никогда не знаете, сколько уровней вы найдете, и они могут меняться от строки к строке.
Я также видел подобные вопросы, опубликованные здесь. Тем не менее, я думаю, что никто не спрашивал о построении «путей» для каждой строки в таблице. Извините, если я пропустил это.
Большое спасибо.