关于多用户操作的问题
fstao 2007-07-10 09:19:07 存储过程如下:
ALTER PROCEDURE p_bs_product_save
@id int= Null Output
@code varchar (300) ,
@billcode varchar (300)
as
begin
insert t_wh_billofdocument([code],[billcode],[bs_customer_id])
values (@code,@billcode)
set @id = @@Identity
end
当很多用户同时执行同一条存储过程(p_bs_product_save)时,比如有两个用户分别是A和B,当A和B执行这一条存储过程时,本来A应返回的 @id=801,B应返回的@id=802的,但当网络、人员操作等等原因时,而且又是同时执行同一条存储过程时,变成A返回的@id=802,而B返回的@id=801,就是A用户取走了B用户的@id的值,而B用户取走了A用户的@id的值;如果要避免这个问题,是不是一定要加上事务才行?把上面的代码改一下:
ALTER PROCEDURE p_bs_product_save
@id int= Null Output
@code varchar (300) ,
@billcode varchar (300)
as
begin
declare @iError int
BEGIN TRANSACTION inserttran aaa
insert t_wh_billofdocument([code],[billcode],[bs_customer_id])
values (@code,@billcode)
set @id = @@Identity
set @iError = @@error
if @iError=0
commite tran aaa
else
rollback tran aaa
end
这样做会不会避免A用户与B用户相互取@id的问题,就是多用户取@id的问题?这样做会不会一个一个用户执行同一个存储过程时,一个一个来取@id值?