select @id=id from a
select @id = @id + 1id为何不用标识列,让它自增?

解决方案 »

  1.   

    应该主要就是这里阻塞:
    select @id=id from a
      

  2.   

    在存储过程里加上下面的设置:
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    设置事务隔离级别,在commit之前,其他事务只能读。
      

  3.   

    create procedure proc_aa
    @a varchar(10).
    @b varchar(10)
    @ret int
    as begin tran strat
    set lock_timeout 20000
    declare @id int
    select @id=id from a (holdlock)
    select @id = @id + 1
    insert into b(a,id) values(@a,@id)if @error<>0
      begin
      set @ret=-1
      rollback tran strat
      return
      end
    else
      begin 
    update a set id=@id 
    if @error<>0
    begin
              set @ret=-1
      rollback tran strat
      return
    end
            commit tran strat
            set @ret=1
      end
    return
      

  4.   

    create procedure proc_aa
    @a varchar(10).
    @b varchar(10)
    @ret int
    as 
    set lock_timeout 20000
    set transaction isolation level read uncommitted
    begin tran strat
    declare @id int
    select @id=id from a 
    select @id = @id + 1
    insert into b(a,id) values(@a,@id)if @error<>0
      begin
      set @ret=-1
      rollback tran strat
      return
      end
    else
      begin 
    update a set id=@id 
    if @error<>0
    begin
              set @ret=-1
      rollback tran strat
      return
    end
            set @ret=1
            commit tran strat
      end
    return
      

  5.   

    LZ 可以加上 with(nolock) 试试看select @id=id from a with(nolock)