SQL实现递归算法

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 00:22 点击:

 

样表:

child,parent

1     0

2     0

3     1

4     2

要实现这种用法一般都通过两种方式来实现:

procedure 方式:

create procedure usp_getallchild(@child int)

as

declare @t table(child int null,parent int null,level intnull)

declare @level int

set @level=0

insert into @t(child,parent,level) select child,parent,@level fromtable where child=@child

while @@rowcount>0

begin

 set @level=@level+1

 insert into @t(child,parent,level) selectchild,parent,@level from table jion @t as t on t.child=table.parentwhere t.level=@level-1

 

end

select * from @t

 

function 方式:

create function udf_getallchild(@child int)

returns @t_return table(child int null,parent int null,level intnull)

as

begin

 

 declare @level int

 set @level=0

 insert into @t_return(child,parent,level)select child,parent,@level from table where child=@child

 while @@rowcount>0

 begin

  set@level=@level+1

  insert into@t(child,parent,level) select child,parent,@level from table jion@t_return as t on t.child=table.parent where t.level=@level-1

 

 end

       return @t_return

end

 

 

-- =============================================

-- Author:

      Gibil

-- Create date: 2011-9-24

--Description:   获取指定代理的所有子类方法

-- =============================================

Create FUNCTION GetAllSubAgent

(

    @AgentIDvarchar(20)

)

RETURNS @t_return TABLE(C_ID int IDENTITY (1,1) NOT NULL PRIMARYKEY,C_AgentID varchar(20) NOT NULL,C_UserName varchar(50)NULL,C_Level int NOT NULL)

AS

BEGIN

    DECLARE@Level int

    SET @Level =0

    INSERT INTO@t_return(C_AgentID,C_UserName,C_Level) SELECT@AgentID,C_UserName,@Level FROM T_UserBase AS U INNER JOIN

      T_PropertyType AS P ON U.[C_PropertyTypeID] = P.[C_TypeID] WHEREU.[C_AccountID] = @AgentID AND P.[C_UserType] = 2 --插入指定代理

    WHILE@@rowcount > 0 --上次执行的受影响行数大于0

    BEGIN

       SET @Level =@Level + 1

       INSERT INTO@t_return(C_AgentID,C_UserName,C_Level) SELECTC_AccountID,C_UserName,@Level FROM T_UserBase AS U

          INNER JOINT_PropertyType AS P ON U.[C_PropertyTypeID] = P.[C_TypeID] WHEREU.[C

摘自 wjbaiverson的专栏

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • sql常见面试题
      • SQL SERVER 2005性能之跟踪
      • SQL编程(一)
      • LINUX上RMAN自动备份脚本
      • sql server面试题
      • 如何将多个SQL查询统计结果一次显示出来
      • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
      • SQL小技巧系列 --- 行转列合并
      • sql server 列转行
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1