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

转载于:https://www.cnblogs.com/masterfy/archive/2009/03/25/1421459.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值