APPLOCK_MODE (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
この関数は、特定のアプリケーション リソースで、ロック所有者によって保持されているロック モードを返します。 APPLOCK_MODE はアプリケーション ロック関数であり、現在のデータベース上で動作します。 データベースはアプリケーション ロックのスコープです。
構文
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), 、値には、いずれかを指定して トランザクション (既定値) または セッションです。
戻り値の型
nvarchar(32)
戻り値
特定のアプリケーション リソースで、ロック所有者によって保持されているロック モードを返します。 ロック モードは次のいずれかの値になります。
NoLock
アップデート
*SharedIntentExclusive
IntentShared
IntentExclusive
*UpdateIntentExclusive
Shared
[排他]
* このロック モードは他のロック モードの組み合わせであり、sp_getapplock で明示的に取得することはできません。
関数のプロパティ
非決定的
インデックス不可
並列不可
例
セッションが異なる 2 人のユーザー (ユーザー 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)