T-SQL中的递归查询

WITH businessunitTree
        AS ( SELECT 
                    Name,BusinessUnitId,ParentBusinessUnitId,ParentBusinessUnitIdName,0 as lev
            FROM     dbo.BusinessUnit
            WHERE    BusinessUnitId = '4DEAF471-8EA1-E611-80C5-005056BD289F'
            UNION ALL
            SELECT   fa.Name,fa.BusinessUnitId,fa.ParentBusinessUnitId,fa.ParentBusinessUnitIdName,son.lev+1
            FROM     dbo.BusinessUnit fa
                    INNER JOIN businessunitTree son ON son.ParentBusinessUnitId = fa.BusinessUnitId
            )
     SELECT Name,BusinessUnitId,ParentBusinessUnitId,ParentBusinessUnitIdName,lev FROM businessunitTree WHERE lev = (SELECT MAX(businessunitTree.lev)-1 FROM businessunitTree)
 此查询相当于把as中上一个查询结果当作临时表busiessunitTree,然后在查询中把子表(busiessunitTree)和原表(Businessunit)进行结合查询查询到上一级信息,然后再与其进行Union连接,依次递归,最终递归返回原等级的所有上级信息。

T-SQL中的递归查询