共用方式為


APPLOCK_MODE (Transact-SQL)

傳回特定應用程式資源的鎖定擁有者所保留的鎖定模式。 APPLOCK_MODE 是一個應用程式鎖定功能,它作用於目前資料庫。 應用程式鎖定的範圍是資料庫。

主題連結圖示 Transact-SQL 語法慣例

語法

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

引數

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

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

  • 'lock_owner'
    這是鎖定的擁有者,也就是要求鎖定時的 lock_owner 值。 lock_owner 是 nvarchar(32),而且此值可以是 Transaction (預設值) 或 Session。

傳回類型

nvarchar(32)

傳回值

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

NoLock

Update

*SharedIntentExclusive

IntentShared

IntentExclusive

*UpdateIntentExclusive

Shared

Exclusive

 

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

函數屬性

Nondeterministic

Nonindexable

Nonparallelizable

範例

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

User A 執行:

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

User B 接著執行:

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

User A 接著執行:

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

User B 接著執行:

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

User A 和 User B 接著執行:

COMMIT TRAN;
GO

請參閱

參考

APPLOCK_TEST (Transact-SQL)

sp_getapplock (Transact-SQL)

sp_releaseapplock (Transact-SQL)