APPLOCK_MODE (Transact-SQL)
Devuelve el modo de bloqueo mantenido por el propietario del bloqueo en un recurso de aplicación específico. APPLOCK_MODE es una función de bloqueo de aplicación y funciona en la base de datos actual. El ámbito de los bloqueos de aplicación es la base de datos.
Convenciones de sintaxis de Transact-SQL
Sintaxis
APPLOCK_MODE('database_principal','resource_name','lock_owner')
Argumentos
'database_principal'
Es el usuario, la función o la función de aplicación a la que se pueden conceder permisos para los objetos de la base de datos. El autor de la llamada de la función debe ser miembro de database_principal, dbo o la función fija de base de datos db_owner para poder llamar a la función correctamente.
'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 en un valor que puede almacenarse en el administrador de bloqueos de Microsoft SQL Server. resource_name es de tipo nvarchar(255) y no tiene 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'
Es el propietario del bloqueo, que es el valor de lock_owner cuando se solicitó el bloqueo. lock_owner es de tipo nvarchar(32) y el valor puede ser Transaction (valor predeterminado) o Session.
Tipos de valor 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 |
Update |
*SharedIntentExclusive |
IntentShared |
IntentExclusive |
*UpdateIntentExclusive |
Shared |
Exclusive |
|
*Este modo de bloqueo es una combinación de otros modos de bloqueo y no se puede adquirir explícitamente mediante el uso de sp_getapplock.
Propiedades de la función
No determinista
No indizable
No paralelizable
Ejemplos
Dos usuarios (usuario A y usuario B) con sesiones independientes ejecutan la siguiente secuencia de instrucciones Transact-SQL.
El usuario A ejecuta:
USE AdventureWorks;
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 AdventureWorks;
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
Referencia
APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)