获取第N层parentChild关系的所有记录

Get All records with parent Child relationship to the Nth Level

我有一家公司 table,其中包含 ParentCompnayID 列以及其他列,这些列表明哪家公司是其他公司的 parent。

DECLARE @company TABLE
(
  CompanyID INT IDENTITY(1, 1) ,
  CompanyName VARCHAR(50) ,
  ParentCompnayID INT
)
INSERT  INTO @company
    ( CompanyName ,
      ParentCompnayID
    )
    SELECT  'Company A' ,
            0
    UNION
    SELECT  'Company AB' ,
            1
    UNION
    SELECT  'Company AA' ,
            1
    UNION
    SELECT  'Company AAA' ,
            2
SELECT  * FROM    @company

现在,正如您在上面的代码中看到的,Compnay A 有 parentCompanyID=0,这意味着它没有任何 parent, 其中 AB 公司和 AA 公司有 parent,即 A 公司。 此外,公司 AAA 有 parent,即公司 AA。 现在我的问题是,如果我在我的 query/procedure 中传递 compnayID 1,我想获得它的所有 child 公司加上公司 1 的 Child 的 childs 公司,最多很快... 根据上面的代码,如果我将通过 CompanyID 1,我应该得到 Company AA、Company AB 和 Company AAA(即 Company AA 的 child)

任何人都可以帮助我构建它 sql。我正在使用 SQL 服务器 2012。

您可以在 common table expression

的帮助下完成此操作
declare @companyId int
set @companyId = 1
;WITH cte
AS
(
    SELECT CompanyId, CompanyName, ParentCompanyId, 0 as steps
    FROM dbo.tblCompany
    --WHERE ParentCompanyId IS NOT NULL
     WHERE companyid = @companyId
  UNION ALL
    SELECT  c.CompanyId, c.CompanyName, c.ParentCompanyId, cte.steps +1 as steps
    FROM dbo.tblCompany AS c
    inner JOIN cte ON cte.CompanyId = c.ParentCompanyId
)
SELECT CompanyId, CompanyName, ParentCompanyId, steps
FROM cte;

上面查询步骤中的是hierarchy中的level