1
以下存儲(名爲 「sp_getNextObj」)過程預製件選擇,更新和插入sp_getapplock @lockResult返回代碼位置
DECLARE @LockResults int
BEGIN TRAN
EXEC @LockResults = sp_getapplock
@Resource = 'sp_getNextObj',
@LockMode = 'Exclusive',
@LockOwner = 'transaction',
@LockTimeout = '3000'
IF @LockResults<0
BEGIN
ROLLBACK
RETURN
END
UPDATE ...
INSERT INTO ...
SELECT * FROM ...
-- release the SP lock
EXEC sp_releaseapplock @Resource = 'sp_getNextObj'
COMMIT
END
我使用sp_getapplock設置代碼鎖區域,
問題是:
是需要在sp之後還是之前的狀態,意思是:什麼時候@LockResult得到它的值?
在我的情況下,我保護這個sp本身,是否意味着整個sp鎖當線程在sp? – shdr
然後,您需要將事務/鎖定調用置於存儲過程的開始位置。只要鎖名稱沒有改變,那麼對存儲過程的每次調用都將導致獨佔執行。請確保始終在從您的proc返回之前釋放鎖。 –