APPLOCK_MODE (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

此函數傳回特定應用程式資源的鎖定擁有者所持有的鎖定模式。 APPLOCK_MODE 是應用程式鎖定函數,會在目前的資料庫上運作。 資料庫是應用程式鎖定的範圍。

Transact-SQL 語法慣例

Syntax

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

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

'database_principal'
可被授與資料庫中物件權限的使用者、角色或應用程式角色。 函數的呼叫者必須是 database_principal、dbo 或 db_owner 固定資料庫角色的成員,才能成功呼叫函數。

'resource_name'
用戶端應用程式指定的鎖定資源名稱。 應用程式必須確定資源名稱是唯一的。 指定的名稱會在內部雜湊成值,而 SQL Server 鎖定管理員可將其儲存在內部。 resource_name 是沒有預設值的 nvarchar(255)resource_name 是以二進位來比較,不論目前資料庫的定序設定為何,都會區分大小寫。

'lock_owner'
為鎖定的擁有者,也就是要求鎖定時的 lock_owner 值。 lock_ownernvarchar(32),而且此值可以是交易 (預設值) 或工作階段

傳回類型

nvarchar(32)

傳回值

傳回特定應用程式資源的鎖定擁有者所保留的鎖定模式。 鎖定模式可以具有以下任一個值:

NoLock
更新
*SharedIntentExclusive

IntentShared
IntentExclusive
*UpdateIntentExclusive

[共用]
排除

*這個鎖定模式是其他鎖定模式的組合,且 sp_getapplock 無法明確地取得它。

函式屬性

不具決定性

Nonindexable

Nonparallelizable

範例

具有個別工作階段的兩位使用者 (使用者 A 和 使用者 B),會依下列順序執行 Transact-SQL 陳述式。

使用者 A 執行:

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  

使用者 B 接著執行:

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  

使用者 A 接著執行:

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

之後,使用者 B 執行:

SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');  
--Result set: '1' (The lock is grantable.)  
GO  

之後,使用者 A 和使用者 B 都執行:

COMMIT TRAN;  
GO  

請參閱

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