我有一个具有以下架构的表:
ID , CatID, ParentCatID, SiteID
我想获取所有属于根类别的网站(意味着其ParentCatID = 0)及其所有后代。
例如 :
ID , CatID, ParentCatID, SiteID -------------------------------- 1 , 2 , 0 , 3 1 , 4 , 2 , 6 1 , 5 , 4 , 7
在此示例中,CatID 2是4的父级,4是5的父级。
如何获取属于根类别及其所有后代的所有SiteID。
使用SQL Server 2005+支持的递归通用表表达式:
WITH hierarchy AS ( SELECT yt.id, yt.catid, yt.parentcatid, yt.siteid FROM YOUR_TABLE yt WHERE yt.parentcatid = 0 UNION ALL SELECT yt.id, yt.catid, yt.parentcatid, yt.siteid FROM YOUR_TABLE yt JOIN hierarchy h ON h.catid = yt.catid) SELECT t.* FROM hierarchy t OPTION (maxrecursion 1000)
如果你得到:
声明终止。语句完成前已用尽最大递归100
默认值为100次递归。可以通过该maxrecursion选项设置最大递归数,最大为32767。
maxrecursion