在存储过程里加上下面的设置: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 设置事务隔离级别,在commit之前,其他事务只能读。
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
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
LZ 可以加上 with(nolock) 试试看select @id=id from a with(nolock)
select @id=id from a
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
设置事务隔离级别,在commit之前,其他事务只能读。
@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
@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