APPLOCK_MODE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Esta función devuelve el modo de bloqueo mantenido por el propietario del bloqueo en un recurso de aplicación específico. Como función de bloqueo de la aplicación, APPLOCK_MODE funciona en la base de datos actual. La base de datos es el ámbito de los bloqueos de la aplicación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

APPLOCK_MODE( 'database_principal' , 'resource_name' , 'lock_owner' )  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

'database_principal'
Es el usuario, el rol o el rol de aplicación al que se pueden conceder permisos para los objetos de la base de datos. Para llamar a la función correctamente, el autor de la llamada a la función debe ser miembro de database_principal, de dbo o del rol fijo de base de datos db_owner.

'resource_name'
Es un nombre de recurso de bloqueo especificado por la aplicación cliente. La aplicación debe asegurar que el nombre del recurso sea exclusivo. El nombre especificado se convierte internamente mediante un algoritmo hash en un valor que puede almacenarse en el administrador de bloqueos de SQL Server. resource_name es nvarchar(255) y no tiene ningún valor predeterminado. resource_name se compara con un binario y distingue mayúsculas de minúsculas, independientemente de la configuración de intercalación de la base de datos actual.

'lock_owner'
El propietario del bloqueo, que es el valor de lock_owner cuando se solicitó el bloqueo. lock_owner es nvarchar(32) y el valor puede ser Transaction (predeterminado) o Session.

Tipos de valores devueltos

nvarchar(32)

Valor devuelto

Devuelve el modo de bloqueo mantenido por el propietario del bloqueo en un recurso de aplicación específico. El modo de bloqueo puede tener uno de estos valores:

NoLock
Actualizar
*SharedIntentExclusive

IntentShared
IntentExclusive
*UpdateIntentExclusive

Compartido
Exclusivo

* Este modo de bloqueo es una combinación de otros modos de bloqueo y sp_getapplock no se puede adquirir explícitamente.

Propiedades de las funciones

No determinista

Nonindexable

Nonparallelizable

Ejemplos

Dos usuarios (usuario A y usuario B) con sesiones independientes ejecutan la siguiente secuencia de instrucciones Transact-SQL.

El Usuario A ejecuta:

USE AdventureWorks2022;  
GO  
BEGIN TRAN;  
DECLARE @result INT;  
EXEC @result=sp_getapplock  
    @DbPrincipal='public',  
    @Resource='Form1',  
    @LockMode='Shared',  
    @LockOwner='Transaction';  
SELECT APPLOCK_MODE('public', 'Form1', 'Transaction');  
GO  

Después, el Usuario B ejecuta:

Use AdventureWorks2022;  
GO  
BEGIN TRAN;  
SELECT APPLOCK_MODE('public', 'Form1', 'Transaction');  
--Result set: NoLock  
  
SELECT APPLOCK_TEST('public', 'Form1', 'Shared', 'Transaction');  
--Result set: 1 (Lock is grantable.)  
  
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');  
--Result set: 0 (Lock is not grantable.)  
GO  

Después, el Usuario A ejecuta:

EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';  
GO  

Después, el usuario B ejecuta:

SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');  
--Result set: '1' (The lock is grantable.)  
GO  

A continuación, el usuario A y el usuario B ejecutan:

COMMIT TRAN;  
GO  

Vea también

APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)