SQL Server返回递归结果集的函数

工作中有个递归很多地方都要用到,不想每个存储过程中都定义,但视图里不能定义变量,只好写成函数了。

CREATE function [dbo].[F_GETDWData]
(
 @ID int
)
 returns @t_Level table (ID int,Level int) --根据所传递的ID,递归查询所有下级单位数据。
begin
 DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level
FROM MM_DW
WHERE ID =@ID
WHILE @@ROWCOUNT>0
BEGIN
    SET @Level=@Level+1
    INSERT @t_Level SELECT a.ID,@Level
    FROM MM_DW a,@t_Level b
    WHERE a.SJID=b.ID
        AND b.Level=@Level-1
END   
 return     
end

调用方法很简单:

SELECT * FROM F_GETDWData(@ID)

以上是SQL Server 2000中,递归得用手动循环的方式。

 

如果是在SQL Server 2005中,可以用下面的方式:

CREATE function [dbo].[F_GETDWData]
(
 @ID int
)
returns @t_Level table (ID int,Level int) --根据所传递的ID,递归查询所有下级单位数据。

BEGIN

WITH ACT(ID,SJID)
AS
(
SELECT ID,SJID FROM RZEAM.MM_DW
WHERE ID=@ID
UNION ALL
SELECT A.ID,A.SJID
FROM RZEAM.MM_DW A,ACT
WHERE A.SJID=ACT.ID
)

INSERT @t_Level
SELECT ID,SJID FROM ACT

RETURN
END

你可能感兴趣的:(SQL Server)