SQL服务器递归查询错误。语句完成之前,最大递归100已用尽

时间:2012-12-04 17:00:34

标签: sql-server recursion recursive-query

我有一个递归查询,当我运行它时会返回错误;在其他数据库中(有更多数据)我没有问题。 在我的情况下,这个查询返回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 

我需要一个建议来重写这个查询以避免递归错误并查看数据,这很少。

2 个答案:

答案 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 )