Domanda: Ho una vista che voglio derivare da una query ricorsiva.SQL: come creare una vista da una query ricorsiva?
La query è della stessa struttura come questa qui: http://forums.asp.net/t/1207101.aspx
E rappresenta una vista ad albero come un set di dati ordinata.
Come si crea una vista che fa questo:
;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
Si potrebbe essere meglio la creazione di una funzione valutata in linea tabella che fa questo. Quindi puoi parametrizzare l'id padre che gli passi. –
È meglio farlo in una vista, e magari aggiungere l'uid della root principale come una colonna, e interrogare quella vista da una stored procedure. Le funzioni con valori di tabella diventeranno lenti quando si hanno molti dati, perché creano delle tabelle temporanee in memoria, che vengono scambiate se la memoria non è sufficiente. –