我有一个递归查询,当我运行它时会返回错误;在其他数据库中(有更多数据)我没有问题。 在我的情况下,这个查询返回2个列(ID_PARENT和ID_CHILD)进行递归,因为我的树可以有多个级别,我希望只有“直接”父级。
注意:我试图在查询结束时放置OPTION(MAXRECURSION 0),但没有运气。 以下查询只是整个查询的一部分,我试图仅在具有连续运行查询的“大查询”结尾处放置OPTION,但没有显示错误。
SQL Server中出现错误:
“语句终止。语句完成前最大递归100已用尽”
查询如下:
WITH q
AS (SELECT ID_ITEM,
ID_ITEM AS ID_ITEM_ANCESTOR
FROM ITEMS_TABLE i
JOIN ITEMS_TYPES_TABLE itt
ON itt.ID_ITEM_TYPE = i.ID_ITEM_TYPE
UNION ALL
SELECT i.ID_ITEM,
q.ID_ITEM_ANCESTOR
FROM q
JOIN ITEMS_TABLE i
ON i.ID_ITEM_PADRE = q.ID_ITEM
JOIN ITEMS_TYPES_TABLE itt
ON itt.ID_ITEM_TYPE = i.ID_ITEM_TYPE)
SELECT ID_ITEM AS ID_CHILD,
ID_ITEM_ANCESTOR AS ID_PARENT
FROM q
我需要一个建议来重写这个查询以避免递归错误并查看数据,这很少。
答案 0 :(得分:1)
好的,经过一些调查,出于某种原因,在2条记录中有一个循环引用:第1项是第2项的孩子,第2项是第1项的孩子。
手动更改值,查询运行完美。
答案 1 :(得分:0)
WITH q AS ( SELECT ID_ITEM ,
ID_ITEM AS ID_ITEM_ANCESTOR
FROM ITEMS_TABLE i
JOIN ITEMS_TYPES_TABLE itt ON itt.ID_ITEM_TYPE = i.ID_ITEM_TYPE
UNION ALL
SELECT i.ID_ITEM ,
q.ID_ITEM_ANCESTOR
FROM q
JOIN ITEMS_TABLE i ON i.ID_ITEM_PADRE = q.ID_ITEM
JOIN ITEMS_TYPES_TABLE itt ON itt.ID_ITEM_TYPE = i.ID_ITEM_TYPE
)
SELECT ID_ITEM AS ID_CHILD ,
ID_ITEM_ANCESTOR AS ID_PARENT
FROM q
OPTION ( MAXRECURSION 500 )