我在查找递归记录的过程中编写CTE。如果以前工作正常,但是当我再次尝试再次运行它时突然停止工作。这是两个表结构的样子:
这是我的代码:
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表。我做了执行计划检查,我唯一能看到的是急切的假脱机。任何帮助将不胜感激,我也应该在这里调试。