APPLOCK_TEST (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Esta función devuelve información acerca de si se puede conceder o no un bloqueo para un recurso de aplicación determinado para el propietario de un bloqueo específico, sin adquirir el bloqueo. Como función de bloqueo de la aplicación, APPLOCK_TEST 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_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , 'lock_owner' )  

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_mode '
El modo de bloqueo que se debe obtener para un recurso concreto. lock_mode es nvarchar(32) y carece de valor predeterminado. lock_mode puede tener cualquiera de estos valores: Shared, Update, IntentShared, IntentExclusive, Exclusive.

' 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. Si se especifica el valor predeterminado o Transaction explícitamente, debe ejecutarse APPLOCK_TEST desde una transacción.

Tipos de valores devueltos

smallint

Valor devuelto

0 si no se puede conceder el bloqueo al propietario especificado o 1 si se puede conceder el bloqueo.

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  

Después, el Usuario A y el Usuario B ejecutan:

COMMIT TRAN;  
GO  

Vea también

APPLOCK_MODE (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)