2010-02-04 6 views

Antwort

8

Der SQL Server 2005+ -Äquivalent der hierarchischen Abfragesyntax CONNECT BY von Oracle besteht darin, einen rekursiven CTE zu verwenden. SQL Server 2008 hinzugefügt HierarchyID. Hier ist ein Beispiel eines rekursiven CTE:

WITH EmployeeHierarchy (EmployeeID, LastName, FirstName, ReportsTo, HierarchyLevel) AS (
    SELECT EmployeeID, 
      LastName, 
      FirstName, 
      ReportsTo, 
      1 as HierarchyLevel 
    FROM Employees 
    WHERE ReportsTo IS NULL 
    UNION ALL 
    -- Recursive step 
    SELECT e.EmployeeID, 
      e.LastName, 
      e.FirstName, 
      e.ReportsTo, 
      eh.HierarchyLevel + 1 AS HierarchyLevel 
    FROM Employees e 
    JOIN EmployeeHierarchy eh ON e.ReportsTo = eh.EmployeeID) 
    SELECT * 
    FROM EmployeeHierarchy 
ORDER BY HierarchyLevel, LastName, FirstName 

„hierarchischen CTE“ und/oder „rekursiven CTE“ googeln werden zahlreiche Ergebnisse auftauchen. Ich nahm die Beispielabfrage von 4GuysFromRolla.com.

Rekursive CTEs sind jetzt ANSI-Standard - die Syntax wurde nicht unterstützt, bis Oracle 11g, wie ich es verstehe.

+0

thx für die Links und das Beispiel. – zapping

1

Es gibt HierarchyID Datentyp in MS SQL Server 2008, die Ihr Leben leichter machen können.

+0

+1 für den frühen Vogel :) – zapping