Frage: Ich habe eine Sicht, die ich von einer rekursiven Abfrage ableiten möchte.SQL: Wie erstellt man eine Ansicht aus einer rekursiven Abfrage?
Die Abfrage ist die gleiche Struktur wie dieser hier: http://forums.asp.net/t/1207101.aspx
und stellt eine Baumansicht als eine geordnete Datenmenge.
Wie kann ich eine Ansicht, die dies tut:
;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
Sie könnten eine Inline-Tabellenwertfunktion besser dran zu schaffen, das dies tut. Dann können Sie die übergebene Parent_Id parametrisieren. –
Es ist besser, es in einer Ansicht zu tun, und vielleicht die Haupt-Root-UID als eine Spalte hinzufügen und diese Ansicht von einer gespeicherten Prozedur abfragen. Table Valued Functions wird langsam, wenn Sie viele Daten haben, weil sie temporäre Tabellen im Speicher erstellen, die ausgetauscht werden, wenn der Speicher nicht ausreicht. –