CTE SQL 查询中的多个递归联合所有选择

use*_*272 3 t-sql sql-server common-table-expression

我正在尝试构建一个查询,以使用 CTE 查询从表中搜索所有父行和子行。

我可以搜索父母并返回孩子,或者搜索孩子并返回父母,但我无法在一个查询中处理这两种可能性。

我只能完成 UNION ALL 查询之一。

我哪里错了?

declare @search nvarchar(50)

--set @search = '%Nucleus sub project%';
set @search = '%Nucleus test';

WITH Parent AS
(
    SELECT * 
    FROM tblProjects 
    WHERE ProjNo LIKE @search 
       OR ProjDes LIKE @search

    UNION ALL

    SELECT tblProjects.* 
    FROM tblProjects  
    JOIN Parent ON tblProjects.proID = Parent.ParentProjID

    UNION ALL

    SELECT tblProjects.* 
    FROM tblProjects  
    JOIN Parent ON tblProjects.ParentProjID = Parent.proID 
)
SELECT distinct * 
FROM Parent 
ORDER BY ParentProjID
Run Code Online (Sandbox Code Playgroud)

我收到错误:

声明终止。在语句完成之前,最大递归次数 100 已用完。

Gor*_*off 7

尝试使用两种不同的 CTE:

WITH x AS (
    SELECT p.*
    FROM tblProjects p
    WHERE  ProjNo LIKE @search OR ProjDes LIKE @search
   ),
   parents as (
    SELECT * 
    FROM x 
    UNION ALL
    SELECT p.* 
    FROM parents JOIN
         tblProjects p
         ON p.parentid= parents.proID
   ),
   children as (
    SELECT * 
    FROM x 
    UNION ALL
    SELECT p.* 
    FROM children JOIN
         tblProjects p
         ON children.parentid = p.proID
   )
SELECT distinct * 
FROM parents
UNION
SELECT distinct *
FROM children;
Run Code Online (Sandbox Code Playgroud)