ALTER   PROCEDURE   dbo.StoredProcedure2   
@UYEAR   as   varchar(4), 
@UDIV     as   varchar(1), 
As
if exists(Select 1 FROM AA WHERE   UYEAR  =   @UYEAR   AND   UDIV   =   @UDIV )
  Select UYEAR,UDIV,AUID+1 FROM AA WHERE   UYEAR  =   @UYEAR   AND   UDIV   =   @UDIV
else
  Select 'UYEAR'=@UYEAR,'UDIV' =@UDIV,'AUID'=1

解决方案 »

  1.   

    Alter   PROCEDURE   dbo.StoredProcedure3   
    @UYEAR   as   varchar(4), 
    @UDIV     as   varchar(1)
    As
    if exists(Select 1 FROM AA WHERE   UYEAR  =   @UYEAR   AND   UDIV   =   @UDIV )
      Select UYEAR,UDIV,AUID+1 FROM AA WHERE   UYEAR  =   @UYEAR   AND   UDIV   =   @UDIV
    else
    insert into aa(uyear,udiv,auid) values(@uyear,@udiv,1)
      
      

  2.   


    create   Table   AA 
    (UYEAR   varchar(4),UDIV   varchar(1),AUID   int) 
    ------------------------------
    搞那么复杂?create proc wsp
    @uyear varchar(4),
    @udiv varchar(1)
    as
          if exits(select 1 from AA where uyear=@year and udiv=@udiv)
                  update aa set auid=auid+1 where uyear=@year and udiv=@udiv 
          else
                  insert into aa select @uyear,@udiv,1
      

  3.   

    好的,呵呵
    不过还有一个问题。
    因为我这个自动加1,是要实现派他操作的。
    如果没有 Transaction的话,会不会出现同一时间更新操作呢?我的AUID就是想实现银行账户的流水号,不管谁操作,都不能重复。
      

  4.   

    好的,呵呵 
    不过还有一个问题。 
    因为我这个自动加1,是要实现派他操作的。 
    如果没有   Transaction的话,会不会出现同一时间更新操作呢? 我的AUID就是想实现银行账户的流水号,不管谁操作,都不能重复。
    --------------------------------------------------------
    if exits(select 1 from AA where uyear=@year and udiv=@udiv)
                  update aa set auid=auid+1 where uyear=@year and udiv=@udiv 
          else
                  insert into aa select @uyear,@udiv,1
    一次只有一个DML语句在执行,一个DML语句默认就是一个Transaction
    所以不会的