0
我有這個疑問應該建立類別的分級通路的關係的SQL Server:與CTE工作造成錯誤
;with cte as
(
select
CAST(1 as int) as RelationID,
1 CategoryID,
c.Name Name
,CAST(('') as varchar(1000)) as Indent,CAST(c.Name as varchar(1000)) as Pathway,0 as Level
from
Categories c
where
c.ID = 1
union all
select
relation.RelationID,
relation.CategoryID,
c.Name Name
,CAST(('|— ' + cte.Indent) as varchar(1000)) as Indent,CAST((cte.Pathway + '/' + c.Name) as varchar(1000)) as Pathway,cte.Level + 1 as Level
from
Category_Relations relation
inner join
Categories c on c.Id = relation.CategoryID
inner join cte on cte.RelationID = relation.RelationID
where c.ID > 1
)
select * from cte
現在我不知道爲什麼它會無限!
我有兩個表是這樣的:
Categories:
ID,Name
1,Main
2,Cat1
3,Cat2
4,Cat3
5,Cat4
6,Cat1.1
7,Cat1.2
8,Cat2.1
9,Cat3.1
Category_Relations:
ID,RelationID,CategoryID
1,0,1 (main cat)
2,1,2
3,1,3
4,1,4
5,1,5
6,2,6
7,2,7
8,3,8
9,4,9
Idealy的SQL應該建立途徑:
main
main/cat1
main/cat2
main/cat3
main/cat4
main/cat1/cat1.1
main/cat1/cat1.2
main/cat2/cat2.1
main/cat3/cat3.1
但它會無限的,並給予遞歸的錯誤,任何幫助,對此?
看看[這裏](http://stackoverflow.com/questions/15080922/infinite-loop-cte-with-option-maxrecursion-0/15081353#15081353)檢測數據中循環的技術。查詢中一個不尋常的地方是'RelationshipId'永遠不會改變,並且是遞歸部分中返回CTE的唯一條件。嘗試在遞歸部分添加'Level Level <3'來限制遞歸併得到結果。 – HABO
@HABO,它怎麼沒變?我在查詢的末尾有cte.RelationID = relation.RelationID的內部連接cte。 – KMX
我的不好。我沒有正確跟蹤'RelationId'上的別名。請嘗試使用「Level」上的限制來查看發生了什麼。 – HABO