【发布时间】:2015-12-02 15:31:07
【问题描述】:
我正在尝试构建一个查询,以使用 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
我得到一个错误:
语句终止。在语句完成之前,最大递归 100 已用完。
【问题讨论】:
-
您遇到的错误是什么?
-
The statement terminated. The maximum recursion 100 has been exhausted before statement completion. -
您一遍又一遍地选择所有行的组合 - 这是一个无限循环,基本上(仅使用递归)。如果您想要后代和祖先,请为后代创建一个
with,为祖先创建另一个,然后为这两个创建union all:)
标签: sql-server tsql common-table-expression