日期:2014-05-19  浏览次数:20720 次

并发更新
应该算是典型的并发问题,看了一些资料,还是不确定自己的对不对,还请各位赐教。
问题描述:
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