--- title: "APPLOCK_MODE (Transact-SQL)" description: "APPLOCK_MODE (Transact-SQL)" author: markingmyname ms.author: maghan ms.date: "07/24/2017" ms.service: sql ms.subservice: t-sql ms.topic: reference f1_keywords: - "APPLOCK_MODE_TSQL" - "APPLOCK_MODE" helpviewer_keywords: - "locking [SQL Server], applications" - "applications [SQL Server], locks" - "sessions [SQL Server], application locks" - "APPLOCK_MODE function" dev_langs: - "TSQL" --- # APPLOCK_MODE (Transact-SQL) [!INCLUDE [SQL Server Azure SQL Database Azure SQL Managed Instance](../../includes/applies-to-version/sql-asdb-asdbmi.md)] This function returns the lock mode held by the lock owner on a particular application resource. As an application lock function, APPLOCK_MODE operates on the current database. The database is the scope of the application locks. :::image type="icon" source="../../includes/media/topic-link-icon.svg" border="false"::: [Transact-SQL syntax conventions](../../t-sql/language-elements/transact-sql-syntax-conventions-transact-sql.md) ## Syntax ```syntaxsql APPLOCK_MODE( 'database_principal' , 'resource_name' , 'lock_owner' ) ``` ## Arguments '*database_principal*' The user, role, or application role that can be granted permissions to objects in the database. 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*' A lock resource name specified by the client application. The application must ensure a unique resource name. The specified name is hashed internally into a value that the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] lock manager can internally store. *resource_name*is **nvarchar(255)**, with no default. *resource_name* is binary compared, and is case-sensitive regardless of the collation settings of the current database. '*lock_owner*' The owner of the lock, which is the *lock_owner* value when the lock was requested. *lock_owner* is **nvarchar(32)**, and the value can be either **Transaction** (the default) or **Session**. ## Return types **nvarchar(32)** ## Return value Returns the lock mode held by the lock owner on a particular application resource. Lock mode can have any one of these values: :::row::: :::column span=""::: **NoLock**
**Update**
**\*SharedIntentExclusive** :::column-end::: :::column span=""::: **IntentShared**
**IntentExclusive**
**\*UpdateIntentExclusive** :::column-end::: :::column span=""::: **Shared**
**Exclusive** :::column-end::: :::row-end::: *This lock mode is a combination of other lock modes and sp_getapplock cannot explicitly acquire it. ## Function properties **Nondeterministic** **Nonindexable** **Nonparallelizable** ## Examples Two users (User A and User B), with separate sessions, run the following sequence of [!INCLUDE[tsql](../../includes/tsql-md.md)] statements. User A runs: ```sql 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 ``` User B then runs: ```sql 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 ``` User A then runs: ```sql EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public'; GO ``` User B then runs: ```sql SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction'); --Result set: '1' (The lock is grantable.) GO ``` User A and User B then run: ```sql COMMIT TRAN; GO ``` ## See also [APPLOCK_TEST (Transact-SQL)](../../t-sql/functions/applock-test-transact-sql.md) [sp_getapplock (Transact-SQL)](../../relational-databases/system-stored-procedures/sp-getapplock-transact-sql.md) [sp_releaseapplock (Transact-SQL)](../../relational-databases/system-stored-procedures/sp-releaseapplock-transact-sql.md)