Sql server sp_getapplock@lockResult返回代码位置

Sql server sp_getapplock@lockResult返回代码位置,sql-server,stored-procedures,transactions,deadlock,Sql Server,Stored Procedures,Transactions,Deadlock,以下存储(名为“sp_getNextObj”)过程预执行器选择、更新和插入 DECLARE@LockResults int 开始训练 EXEC@LockResults=sp_getapplock @资源='sp_getNextObj', @LockMode='独占', @LockOwner='事务', @锁定超时='3000' 如果@LockResults,sp_getapplock将序列化对存储过程中代码块内关键部分的访问。它可以位于存储过程的主体内,以保护要序列化访问的部分 如果sp_get

以下存储(名为“sp_getNextObj”)过程预执行器选择、更新和插入

DECLARE@LockResults int
开始训练
EXEC@LockResults=sp_getapplock
@资源='sp_getNextObj',
@LockMode='独占',
@LockOwner='事务',
@锁定超时='3000'

如果@LockResults,sp_getapplock将序列化对存储过程中代码块内关键部分的访问。它可以位于存储过程的主体内,以保护要序列化访问的部分

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

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

sp_getapplock将序列化对存储过程中代码块内关键部分的访问。它可以位于存储过程的主体内,以保护要序列化访问的部分

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

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

在我的情况下,我保护这个sp本身,这是否意味着当线程在sp中时整个sp都会锁定?然后需要将事务/锁定调用放在存储过程的开头。只要锁名不变,那么对存储过程的每次调用都将导致独占执行。只需确保在从进程返回之前始终释放锁。在我的情况下,我保护此sp本身,这是否意味着当线程位于sp中时整个sp都会被锁定?然后需要将事务/锁调用放在存储过程的开头。只要锁名不变,那么对存储过程的每次调用都将导致独占执行。只需确保在从进程返回之前始终释放锁。