Pytanie: Mam widok, który chcę wyprowadzić z zapytania rekurencyjnego.SQL: Jak utworzyć widok z zapytania rekurencyjnego?
Kwerenda ma taką samą strukturę jak ten tutaj: http://forums.asp.net/t/1207101.aspx
i stanowi katalogów jako uporządkowanego zbioru danych.
Jak mogę utworzyć widok, który wykonuje to:
;WITH Tree (ID, [NAME], PARENT_ID, Depth, Sort) AS
(
SELECT ID, [NAME], PARENT_ID, 0 AS Depth, CONVERT(varchar(255), [Name]) AS Sort FROM Category
WHERE PARENT_ID = 0
UNION ALL
SELECT CT.ID, CT.[NAME], CT.PARENT_ID, Parent.Depth + 1 AS Depth,
CONVERT(varchar(255), Parent.Sort + ' | ' + CT.[NAME]) AS Sort
FROM Category CT
INNER JOIN Tree as Parent ON Parent.ID = CT.PARENT_ID
)
-- HERE IS YOUR TREE, Depths gives you the level starting with 0 and Sort is the Name based path
SELECT ID, [NAME], PARENT_ID, Depth, Sort FROM Tree
ORDER BY Sort
Możesz być lepiej tworząc inline Tabela Ceniąca funkcja, która to robi. Następnie możesz sparametryzować Parent_Id, które przekazujesz do niego. –
Lepiej zrobić to w widoku, a może dodać główny identyfikator UID jako kolumnę i wysłać zapytanie do tego widoku z procedury składowanej. Table Valued Funkcje będą zwalniać, gdy masz dużo danych, ponieważ tworzą one tymczasowe tabele w pamięci, które zostają zamienione, jeśli pamięć nie jest wystarczająca. –