SQL 2000递归查询

2014-11-24 02:38:04 · 作者: · 浏览: 3

网上的做法都是不能以NUL为关键字进行递归查询,现修改如下,可以任意进行递归,记录备忘

--查询指定节点及其所有子节点的函数

alter FUNCTION GetLevel(@ID nvarchar(36))

RETURNS @t_Level TABLE(ID nvarchar(36),Level int)

AS

BEGIN

DECLARE @Level int

SET @Level=1

INSERT @t_Level SELECT @ID,@Level

if (@ID is null)

begin

SET @Level=@Level+1

INSERT @t_Level SELECT a.ID,@Level FROM Area a,@t_Level b WHERE a.XPath is null AND b.Level=@Level-1

end

WHILE @@ROWCOUNT>0

BEGIN

SET @Level=@Level+1

INSERT @t_Level SELECT a.ID,@Level FROM Area a,@t_Level b WHERE a.XPath=b.ID AND b.Level=@Level-1

END

RETURN

END

GO

调用方法

SELECT a.*

FROM Area a,GetLevel(null) b

WHERE a.ID=b.ID ORDER BY A.ID

作者 ascii