ORACLE在SQL Server中连接by子句等效

zap*_*ing 5 sql t-sql sql-server oracle hierarchical-data

在SQL Server中是否存在与CONNECT BY等效的子句.使用parentId字段构建类别树的要求.

OMG*_*ies 8

SQL Server 2005+等同于Oracle的CONNECT BY分层查询语法是使用递归CTE.SQL Server 2008添加了HierarchyID.这是一个递归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 
Run Code Online (Sandbox Code Playgroud)

谷歌搜索"分层CTE"和/或"递归CTE"将产生许多结果.我从4GuysFromRolla.com获取了示例查询.

递归CTE现在是ANSI标准 - 据我所知,直到Oracle 11g才支持语法.