您的位置:首页 > 数据库

sql游标 递归

2010-03-30 15:23 127 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐