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