并发更新
应该算是典型的并发问题,看了一些资料,还是不确定自己的对不对,还请各位赐教。
问题描述:
5个客户端,1个sever
依照id同时更新数据库的记录,增加id对应选举人的得票数
我写的存储过程如下:
CREATE PROCEDURE UpdateHongKongVoteNum
@id int as
set xact_abort on
begin transaction aaa
update Info_HongKongVoterNum with(xlock,paglock) set voteNum=voteNum+1 where id=@id
commit tran aaa
GO
------解决方案--------------------CREATE PROCEDURE UpdateHongKongVoteNum
@id int as
set nocount on --加这句好些
set xact_abort on
begin transaction aaa
update Info_HongKongVoterNum with(xlock,paglock) set voteNum=voteNum+1 where id=@id
if @@error <> 0 goto err_handle
commit tran aaa
return 0
err_handle:
ROLLBACK tran aaa
return 1
GO