Esiste una clausola equivalente a CONNECT BY di Oracle in SQL Server. Il requisito per costruire un albero di categorie usando un campo parentId.ORACLE Collega per clausola equivalente in SQL Server
5
A
risposta
8
L'equivalente SQL Server 2005+ della sintassi di query gerarchica Oracle CONNECT BY
consiste nell'utilizzare un CTE ricorsivo. SQL Server 2008 ha aggiunto HierarchyID. Ecco un esempio di una CTE ricorsiva:
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
Googling "gerarchica CTE" e/o "CTE ricorsiva" storceranno numerosi risultati. Ho preso la query di esempio dal 4GuysFromRolla.com.
Le CTE recursive sono ora standard ANSI: la sintassi non è stata supportata fino a Oracle 11g, come ho capito.
1
C'è il tipo di dati HierarchyID in MS SQL Server 2008, che può semplificarti la vita.
+0
+1 per l'early bird :) – zapping
thx per i collegamenti e il campione. – zapping