sp_getapplock @lockResult Return 代码位置

sp_getapplock @lockResult Return Code position

以下存储的(名为 "sp_getNextObj")程序预制 selectupdate插入

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的body之后还是之前,意思是:@LockResult什么时候取值?

sp_getapplock 将序列化对存储过程中代码块内临界区的访问。它可以在存储过程的主体内,保护您要序列化访问的部分。

如果 sp_getapplock 调用和后续 COMMITROLLBACK 之间的代码调用名为 X 的存储过程,则该存储过程将仅在调用者的上下文中受到保护与锁。其他命令可以在带锁的代码上下文之外调用 X。

PROCEDURE Y
BEGIN
    DO SOME STUFF
    ...
    LOCK HERE --> Critical Section
        ...
        CALL X
    COMMIT OR ROLLBACK HERE --> Release Lock
    ...
   DO SOME STUFF
END