sql游标 递归

DUMP   TRANSACTION   数据库名  WITH   NO_LOG 

 

 

 

 

 

 

SET QUOTED_IDENTIFIER ON

GO
SET ANSI_NULLS ON
GO
ALTER          FUNCTION  dbo.GetSubBomCodeList(@BomCode varchar(50),@VersionNo int,@BomCodeList varchar(8000)='',@LevelCount int=-1)   
   RETURNS Varchar(8000)  
   AS  
   BEGIN
   Declare @SubBomCode varchar(50),@SubBomVersionNo int,@StartLevel  int  
   if    @LevelCount=-1  
   begin  
 set    @StartLevel=@@NESTLEVEL  
 set    @LevelCount=@StartLevel  
   end  
   else 
    set    @StartLevel=-1

   DECLARE SubBomCode_Cursor  CURSOR local FOR    --定义游标  
   Select BomItem.SubBomCode,BomItem.SubBomVersionNo From BomItem  where
 isnull(SubBomCode,'')<>''  and BomItem.VersionNo = @VersionNo and BomCode = @BomCode
   OPEN  SubBomCode_Cursor  
    FETCH  NEXT FROM  SubBomCode_Cursor  
   INTO   @SubBomCode,@SubBomVersionNo 
 
   WHILE @@FETCH_STATUS    =    0   --循环游标,即循环当前类的弟一级子类  
   BEGIN  
 set @SubBomCode = LTrim(RTrim(@SubBomCode))  
   select @BomCodeList =
   case when @BomCodeList <> '' then
   case when charindex(@SubBomCode+'-'+cast(@SubBomVersionNo as varchar),@BomCodeList) > 0
        then @BomCodeList
        else @BomCodeList + ',''' + @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''  
   end
        else ''''+ @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''
   end
      if @@NESTLEVEL<32 
      set  @BomCodeList= dbo.GetSubBomCodeList(@SubBomCode,@SubBomVersionNo,@BomCodeList,@LevelCount)    --递归。    
          else  
     set  @BomCodeList= @BomCodeList + ',''' + @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''  
   FETCH    NEXT    FROM    SubBomCode_Cursor    into    @SubBomCode,@SubBomVersionNo
   End   
   CLOSE    SubBomCode_Cursor  
   DEALLOCATE    SubBomCode_Cursor
   Return @BomCodeList  
 
   END

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值