ALTER    PROCEDURE SOF_getmaxbh 
   @biaoshi varchar(3), --单据类型标识
   @addflag integer, --0,1  在前台使用;2 组成一个号返回,序号不加1(结转号),3 序号加 1 返回(单据编号);
   @maxbh varchar(11)=NULL output  --直接返回编号
 AS
 
 /***************************************************************/
 --过程主题:获得单据编号   errorID=1800
 /***************************************************************/
 
 --内部变量声明
 declare @recnum integer,
         @rowcount integer
 set @recnum=0
 /*非事务内容执行*/
 
 --每一过程拥有一唯一区界号,过程内的异常编号在此基础上增加
 declare @errcode integer
 set @errcode=1800         
 declare @return integer
 set @return=0
 
 --启动事务处理
 declare @tran_point int --控制事务嵌套
 set @tran_point=@@trancount --保存事务点
 if @tran_point=0
  begin tran tran_SOF_getmaxbh
 else
  save tran tran_SOF_getmaxbh
 
 if @addflag=1 or @addflag=3
 begin 
   update maxbh set @recnum=recnum=recnum+1 where biaoshi=@biaoshi
   set @rowcount=@@rowcount
   if @@error<>0
   begin
     set @return=1
     goto err_lab
   end 
 end
 else
 begin
   select @recnum=recnum from maxbh(nolock) where biaoshi=@biaoshi
 end
 
 if @rowcount=0 
 begin
   set @recnum=0
   insert into maxbh (biaoshi,maxbh,mkbh,recnum) values (@biaoshi,'','',@recnum)
 end
 
 --返回结果
 declare @s_recnum varchar(11)
 set @s_recnum=LTRIM(str(@recnum))
 
 if @addflag>1
   set @maxbh=@biaoshi+ REPLICATE('0',11-len(@biaoshi)-len(@s_recnum))+@s_recnum
 else
   select @biaoshi+ REPLICATE('0',11-len(@biaoshi)-len(@s_recnum))+@s_recnum as recnum
 
 --结束事务处理
 if @tran_point=0
  commit tran tran_SOF_getmaxbh
 goto return_lab
 err_lab:
 if @return<100 set @return=@errcode +@return
 rollback tran tran_SOF_getmaxbh
 return_lab:
 return @return