sp_releaseapplock (Transact-SQL)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance
アプリケーション リソースのロックを解放します。
構文
sp_releaseapplock
[ [ @Resource = ] N'Resource' ]
[ , [ @LockOwner = ] 'LockOwner' ]
[ , [ @DbPrincipal = ] N'DbPrincipal' ]
[ ; ]
引数
[ @Resource = ] N'Resource'
クライアント アプリケーションによって指定されたロック リソース名を指定します。 @Resource は nvarchar(255) で、既定値は NULL
です。 @Resource はバイナリ比較であるため、現在のデータベースの照合順序設定に関係なく大文字と小文字が区別されます。
アプリケーションは、リソースが一意であることを確認する必要があります。 指定された名前は、SQL Server ロック マネージャーに格納できる値に内部的にハッシュされます。
[ @LockOwner = ] 'LockOwner'
ロックの所有者。ロックが要求されたときの @LockOwner 値です。 @LockOwner は varchar(32) で、既定値は Transaction
です。 値は Session
することもできます。 @LockOwner値が Transaction 既定または明示的に指定されている場合、sp_getapplock
はトランザクション内から実行する必要があります。
[ @DbPrincipal = ] N'DbPrincipal'
データベース内のオブジェクトに対するアクセス許可を持つユーザー、ロール、またはアプリケーション ロール。 @DbPrincipal は sysname で、既定値は public
です。 関数を呼び出すには、database_principal、dbo、または固定データベース ロール db_owner のメンバーであることが必要です。
リターン コードの値
>= 0
(成功)、または < 0
(失敗)。
Value | 結果 |
---|---|
0 |
ロックが正常に解放されました。 |
-999 |
パラメーターの検証エラーまたはその他の呼び出しエラーです。 |
解説
アプリケーションが同じロック リソース sp_getapplock
複数回呼び出す場合、ロックを解放するには、 sp_releaseapplock
を同じ回数呼び出す必要があります。
何らかの理由でサーバーがシャットダウンすると、ロックが解放されます。
アクセス許可
ロール public のメンバーシップが必要です。
例
次の例では、AdventureWorks2022
データベースのリソース Form1
の現在のトランザクションに関連付けられているロックを解放します。
USE AdventureWorks2022;
GO
EXEC sp_getapplock @DbPrincipal = 'dbo',
@Resource = 'Form1',
@LockMode = 'Shared';
EXEC sp_releaseapplock @DbPrincipal = 'dbo',
@Resource = 'Form1';
GO