在SQLServer2005下,递归查询可以通过公共表达式(CTE)来实现。
如下所示:
WITH ColumnTree(projectId,parentId,columnId,columnName,columnUrl,ifDel,tag,clevel)AS(
select
projectId,
parentId,
columnId,
columnName,
columnUrl,
ifDel,
columnId as tag,
0 as clevel
FROM
columnCms
WHERE
columnId=14
UNION
ALL
SELECT
p.projectId,
p.parentId,
p.columnId,
p.columnName,
p.columnUrl,
p.ifDel,
ch.tag,
ch.clevel+1
FROM
columnCms p
INNER JOIN
ColumnTree ch
ON ch.parentId=p.columnId
)
SELECT
columnId
FROM
ColumnTree c
WHERE
c.ifDel=0
ORDER BY
c.clevel DESC
上面代码中,绿色的部分定义了递归的“根”,而橘黄色部分则执行的是递归查询。在递归公共表达式查询时,必须使用UNION ALL。定义好CTE后,就可以使用在CTE中定义的列(深蓝色部分)从CTE中查询。