使用CTE查找递归记录失败

时间:2016-03-06 02:38:36

标签: sql sql-server tsql common-table-expression recursive-query

我在查找递归记录的过程中编写CTE。如果以前工作正常,但是当我再次尝试再次运行它时突然停止工作。这是两个表结构的样子: enter image description here

enter image description here

这是我的代码:

DELETE FROM [dbo].[NVA_Work_Rollup_BOM_Materials]
WHERE Product_Item_No = Ingredient_Item_No;

IF OBJECT_ID(N'tempdb..#temp', N'U') IS NOT NULL
DROP TABLE #temp

CREATE TABLE #temp (Product nvarchar(32),
                Ingredient nvarchar(32),
                Trail nvarchar(max),
                Loopcheck BIT
                )
TRUNCATE TABLE #temp

DECLARE @False AS BIT,
    @True  AS BIT

SET     @False = 0
SET     @True  = 1;

WITH C 
as (
select       
    Product_Item_No,
    Ingredient_Item_No, 
    CAST(('|' + Product_Item_No + '|') as nvarchar(max)) as Trail,
    @False as LP
from  NVA_Work_Rollup_BOM_Materials
where
Product_Item_No in (select Item_No from NVA_Work_Rollup_Level_Codes where       Level_Code = 0 and Rpt_Period = @P_CurrentPeriod) 
AND Rpt_Period = @P_CurrentPeriod

union all

select     
    Matl.Product_Item_No,
    Matl.Ingredient_Item_No,            
    CAST((Trail + (Matl.Product_Item_No +'|')) as nvarchar(max)),
    case 
        when Trail like '%|' + CAST((Matl.Ingredient_Item_No) as nvarchar(max)) + '|%'
        then @True
        else @False
    end as LP       
from NVA_Work_Rollup_BOM_Materials as Matl
inner join C 
on C.Ingredient_Item_No = Matl.Product_Item_No
where C.LP = 0
and Matl.Rpt_Period = @P_CurrentPeriod
)

INSERT INTO #temp
SELECT * FROM C
WHERE LP = 1 
OPTION (maxrecursion 0)

程序停留在那里并且不会填充#temp表。我做了执行计划检查,我唯一能看到的是急切的假脱机。任何帮助将不胜感激,我也应该在这里调试。

0 个答案:

没有答案
相关问题