Share via


APPLOCK_MODE (Transact-SQL)

特定のアプリケーション リソースで、ロック所有者によって保持されているロック モードを返します。APPLOCK_MODE はアプリケーション ロック関数であり、現在のデータベースで動作します。アプリケーション ロックのスコープはデータベースです。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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

引数

'database_principal'

データベース内のオブジェクトに対する権限を与えることのできるユーザー、ロール、またはアプリケーション ロールを指定します。関数を呼び出すには、database_principaldbo、または固定データベース ロール db_owner のメンバであることが必要です。

'resource_name'

クライアント アプリケーションによって指定されたロック リソース名を指定します。アプリケーション側では、リソース名が一意になるよう管理されている必要があります。指定した名前はロック マネージャに格納できる値にハッシュされます。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

次の例では、個別にセッションを開いている 2 人のユーザー (ユーザー A とユーザー B) が、一連の Transact-SQL ステートメントを実行します。

ユーザー A が次のステートメントを実行します。

USE AdventureWorks;
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 AdventureWorks;
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)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手