APPLOCK_TEST (Transact-SQL)APPLOCK_TEST (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 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.This function returns information as to whether or not a lock can be granted on a particular application resource, for a specified lock owner, without acquisition of the lock. Como función de bloqueo de la aplicación, APPLOCK_TEST funciona en la base de datos actual.As an application lock function, APPLOCK_TEST 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_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , '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_mode '' lock_mode '
El modo de bloqueo que se debe obtener para un recurso concreto.The lock mode to obtain for a specific resource. lock_mode es nvarchar(32) y carece de valor predeterminado.lock_mode is nvarchar(32), with no default value. lock_mode puede tener uno de estos valores: Shared, Update, IntentShared, IntentExclusive, Exclusive.lock_mode can have any of these values: Shared, Update, IntentShared, IntentExclusive, Exclusive.

' 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. Si se especifica el valor predeterminado o Transaction explícitamente, debe ejecutarse APPLOCK_TEST desde una transacción.If default or Transaction is explicitly specified, APPLOCK_TEST must be executed from within a transaction.

Tipos de valores devueltosReturn types

smallintsmallint

Valor devueltoReturn value

0 si no se puede conceder el bloqueo al propietario especificado o 1 si se puede conceder el bloqueo.0 if the lock cannot be granted to the specified owner, or 1 if the lock can be granted.

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  

Después, el Usuario A y el Usuario B ejecutan:User A and User B then both run:

COMMIT TRAN;  
GO  

Vea tambiénSee also

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