Ich habe drei SQL Server-Tabellen: Projects
, ProjectTree
, ProjectTreeRec
.Rekursion in Select-Anweisung für SQL Server
Projects
sind analog zu Verzeichnissen und ich versuche, alle Unterverzeichnisse unter einem Verzeichnis namens Standard Parts
zu finden. Offensichtlich ist Rekursion hier erforderlich.
Die Projects
Tabelle hat die folgenden Spalten:
ProjectID, Name, Deleted
Die ProjectTree
Tabelle hat die folgenden Spalten:
ProjectID, ChildProject
Ich glaube nicht, ich brauche die ProjectTreeRec
Tabelle als Teil dieser Bemühungen, aber es enthält die Spalten ChildProjectID
, ParentProjectID
, Level
.
Ich möchte eine rekursive Select-Anweisung entwickeln, um alle Unterverzeichnisse unterhalb des Verzeichnisses Standard Parts
zu finden, die nicht gelöscht wurden (nicht 1, sondern 0).
Ich bin neu in CTE und Rekursion. Ich bekomme ein paar Ergebnisse, aber nicht das, wonach ich suche.
Hier ist der nicht-rekursive Aufruf, der mich die erste Ebene nach unten findet, aber nicht tiefer geht. Es funktioniert gut.
SELECT
'(Directory Not Available)'
UNION
SELECT DISTINCT
C.[Name]
FROM
[EPDM].[dbo].[Projects] A
JOIN
[EPDM].[dbo].[ProjectTree] B ON B.ProjectID = A.ProjectID
JOIN
[EPDM].[dbo].[Projects] C ON B.childproject = C.projectid
WHERE
A.name = 'Standard Part Library'
AND A.[Deleted] = 0;
Jede Hilfe ist willkommen.
Welche Version von SQL Server verwenden Sie? –
Sie können es für rekursive CTE überprüfen: http://stackoverflow.com/questions/37973842/get-all-duplicate-data-by-parent-orchild-id-sql-server/37975448#37975448 –
Ich verwende SQL Server Standard 2014 – CodeWriter