gpt4 book ai didi

SQL 2005 sp_GetAppLock --- 何时调用 sp_ReleaseAppLock?

转载 作者:行者123 更新时间:2023-12-03 03:25:39 28 4
gpt4 key购买 nike

对最后一条消息感到抱歉。我在我的问题上做了一个粘贴。长问题简短,当在 try/catch 块内使用 sp_GetAppLock 时,我应该在捕获异常时调用 sp_ReleaseAppLock 吗?

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

BEGIN TRAN

DECLARE @res INT

EXEC @res = sp_getapplock
@Resource = 'This a Lock ID 3',
@LockMode = 'Exclusive',
@LockOwner = 'Transaction',
@LockTimeout = 60000,
@DbPrincipal = 'public'

if @res < 0
begin
declare @errorMessage nvarchar(200)

set @errorMessage =
case @res
when -1 then 'Applock request timed out.'
when -2 then 'Applock request canceled.'
when -3 then 'Applock involved in deadlock'
else 'Parameter validation or other call error.'endraiserror (@errorMessage,16,1)
end

SELECT...
INSERT...
UPDATE...

COMMIT TRANSACTION -- THIS RELEASES THE APPLOCK

RETURN 0; END TRY

BEGIN CATCH

-- ROLLBACK TRANSACTION IF NEEDED IF @@TRANCOUNT > 0 ROLLBACK

/* Exception handling stuff here. Should I call sp_releaseapplock? ... ... */

-- return the success code RETURN -1;

END CATCH

最佳答案

来自 sp_getapplock

Locks associated with the current transaction are released when the transaction commits or rolls back.



所以,它不需要,因为你回滚了。

但是,如果您想确保安全,我会在 CATCH 块之后进行,并首先使用 APPLOCK_TEST 进行测试。 .通常,这将是我们没有的 FINALLY 块。

我会把它放在这里,所以它总是被执行。如果 session 继续,或者连接池让它保持事件状态(是吗?现在忘记了)那么你依赖 COMMIT/ROLLBACK,如果它不是在退出之前。当然,任何错过 CATCH 块的东西无论如何都将是一个严重的中止错误......

关于SQL 2005 sp_GetAppLock --- 何时调用 sp_ReleaseAppLock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380707/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com