Existe-t-il une clause équivalente à CONNECT BY d'Oracle dans SQL Server? L'exigence de créer une arborescence de catégories à l'aide d'un champ parentId.ORACLE Connect by clause équivalente dans SQL Server
Répondre
L'équivalent SQL Server 2005+ de la syntaxe de requête hiérarchique CONNECT BY
d'Oracle consiste à utiliser un CTE récursif. SQL Server 2008 a ajouté HierarchyID. Voici un exemple d'un CTE récursive:
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
googler « CTE hiérarchique » et/ou « CTE récursive » se retrouvera de nombreux résultats. J'ai pris l'exemple de requête du 4GuysFromRolla.com.
Les CTE récursifs sont maintenant des standards ANSI - la syntaxe n'était pas supportée jusqu'à ce que je comprenne Oracle 11g.
Le type de données HierarchyID est disponible dans MS SQL Server 2008, ce qui peut vous simplifier la vie.
+1 pour le début de l'oiseau :) – zapping
thx pour les liens et l'échantillon. – zapping