共享锁与排它锁
我这里有一个存储过程,请高手指点:我该如何写语句,加行级锁,主要是排他锁,使得sql语句能够避免并发操作.
CREATE PROCEDURE a_ADD
@prescriptionid varchar(12) ,
@medicineid varchar(8) ,
@amount numeric(9,2)
as
Begin Transaction
insert into a(prescriptionid,medicineid ,amount) values(@prescriptionid,@medicineid,@amount)
If @@Error <> 0 RollBack Transaction
update medicineinfo set amountofusing=amountofusing-@amount where medicineid=@medicineid
If @@Error <> 0 RollBack Transaction
Commit Transaction
各位高手多多帮忙.谢谢了
------解决方案--------------------with(rowlock)
------解决方案--------------------with(nolock)
------解决方案--------------------
如果每次修改一条或者少量的行,根本没有必要指定锁,因为SQL SERVER能够很好的控制该用什么锁,这样可以达到性能和并发的最佳平衡。
如果修改的数据量较大,可以使用下边的办法来防止SQL SERVER锁升级(行锁升级为页锁或表索)而影响并发:
set rowcount 50
update more:
update 语句……
if @@rowcount > 0
goto update more
set rowcount 0
每次修改数据时,要让事务执行的时间尽可能的短一些,事务就不会长时间的占用排他锁而影响并发。