利用游标实现递归(函数)

 涉及到的数据库表(SSC_Function)结构:

 

create function [dbo].[GetFunctionInfo]

(

    @PARENT_ID as varchar(100) --ID

)

returns @FunctionTreeInfo table

(

    FUNCTION_ID varchar(100) not null,

    FUNCTION_NAME nvarchar(100),

    FUNCTION_DESC nvarchar(100),

    FUNCTION_ORDER int,

    PARENT_ID varchar(100),

    FUNCTION_LEVEL int

)

as

begin

    --声明相应变量,用于接收游标中的值

    declare @FUNCTION_ID varchar(100)

    declare @FUNCTION_NAME nvarchar(100)

    declare @FUNCTION_DESC nvarchar(100)

    declare @FUNCTION_ORDER int

    declare @PARENT_ID2 varchar(100)

    declare @FUNCTION_LEVEL int

   

    --声明一个游标,读取功能表中PARENT_ID为目前传入参数值的记录

    declare cur_function cursor

    for

    select * from SSC_Function where PARENT_ID=@PARENT_ID

    order by FUNCTION_ORDER

   

    --打开游标

    open cur_function

 

    --读取游标中记录的第一条

    fetch next from cur_function

    into @FUNCTION_ID,@FUNCTION_NAME,@FUNCTION_DESC,@FUNCTION_ORDER,@PARENT_ID2,@FUNCTION_LEVEL

 

    while @@fetch_status=0

    begin

       --将数据插入到表中

       insert into @FunctionTreeInfo

        values(@FUNCTION_ID,@FUNCTION_NAME,@FUNCTION_DESC,@FUNCTION_ORDER,@PARENT_ID2,@FUNCTION_LEVEL)

 

       --递归

       insert @FunctionTreeInfo select * from GetFunctionInfo(@FUNCTION_ID)

      

       --继续读取下一条记录

       fetch next from cur_function

       into @FUNCTION_ID,@FUNCTION_NAME,@FUNCTION_DESC,@FUNCTION_ORDER,@PARENT_ID2,@FUNCTION_LEVEL

    end

 

    --关闭游标

    close cur_function

    deallocate cur_function 

 

    return

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值