Friday, October 14, 2016

MSSQL: 避免一個SP被多個用戶同時執行

這段代碼需要放在要使用的SP中,在執行這個SP時會先檢查有沒有人取用了這個testingLock。如有人取用了就會不執行下面的指令,並且會等待這個Lock被釋放後才會被執行。對於經常執行update或insert的SP很有用。


CREATE PROCEDURE [dbo].[ben_testing] 
AS
BEGIN
 SET NOCOUNT ON;
 declare @RC int;
 begin tran
  exec @RC = sp_getapplock @Resource='testingLock', @LockMode='Exclusive', @LockOwner='Transaction'
  select @@SPID [session_id], @RC [return code], GETDATE()
  waitfor delay '00:00:05'
 commit
END

上面的sp_getapplock可以避免SP同時執行,以保護資料更新時的問題。

Reference: Prevent multiple users from running the same SQL Server stored procedure at the same time

No comments: