APPLOCK_MODE (Transact-SQL)APPLOCK_MODE (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Esta función devuelve el modo de bloqueo mantenido por el propietario del bloqueo en un recurso de aplicación específico.This function returns the lock mode held by the lock owner on a particular application resource. Como función de bloqueo de la aplicación, APPLOCK_MODE funciona en la base de datos actual.As an application lock function, APPLOCK_MODE operates on the current database. La base de datos es el ámbito de los bloqueos de la aplicación.The database is the scope of the application locks.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

'database_principal''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.The user, role, or application role that can be granted permissions to objects in the database. 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.To successfully call the function, the function caller must be a member of database_principal, dbo, or the db_owner fixed database role.

'resource_name''resource_name'
Es un nombre de recurso de bloqueo especificado por la aplicación cliente.A lock resource name specified by the client application. La aplicación debe asegurar que el nombre del recurso sea exclusivo.The application must ensure a unique resource name. El nombre especificado se convierte internamente mediante un algoritmo hash en un valor que puede almacenarse en el administrador de bloqueos de SQL ServerSQL Server.The specified name is hashed internally into a value that the SQL ServerSQL Server lock manager can internally store. resource_name es nvarchar(255) y no tiene ningún valor predeterminado.resource_nameis nvarchar(255), with no default. 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.resource_name is binary compared, and is case-sensitive regardless of the collation settings of the current database.

'lock_owner''lock_owner'
El propietario del bloqueo, que es el valor de lock_owner cuando se solicitó el bloqueo.The owner of the lock, which is the lock_owner value when the lock was requested. lock_owner es nvarchar(32) y el valor puede ser Transaction (predeterminado) o Session.lock_owner is nvarchar(32), and the value can be either Transaction (the default) or Session.

Tipos de valores devueltosReturn types

nvarchar(32)nvarchar(32)

Valor devueltoReturn value

Devuelve el modo de bloqueo mantenido por el propietario del bloqueo en un recurso de aplicación específico.Returns the lock mode held by the lock owner on a particular application resource. El modo de bloqueo puede tener uno de estos valores:Lock mode can have any one of these values:

NoLockNoLock UpdateUpdate *SharedIntentExclusive*SharedIntentExclusive
IntentSharedIntentShared IntentExclusiveIntentExclusive *UpdateIntentExclusive*UpdateIntentExclusive
SharedShared ExclusivoExclusive

* Este modo de bloqueo es una combinación de otros modos de bloqueo y sp_getapplock no se puede adquirir explícitamente.*This lock mode is a combination of other lock modes and sp_getapplock cannot explicitly acquire it.

Propiedades de las funcionesFunction properties

NondeterministicNondeterministic

NonindexableNonindexable

NonparallelizableNonparallelizable

EjemplosExamples

Dos usuarios (usuario A y usuario B) con sesiones independientes ejecutan la siguiente secuencia de instrucciones Transact-SQLTransact-SQL.Two users (User A and User B), with separate sessions, run the following sequence of Transact-SQLTransact-SQL statements.

El usuario A ejecuta:User A runs:

USE AdventureWorks2012;  
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:User B then runs:

Use AdventureWorks2012;  
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:User A then runs:

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

Después, el usuario B ejecuta:User B then runs:

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:User A and User B then run:

COMMIT TRAN;  
GO  

Vea tambiénSee also

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