sp_releaseapplock (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

アプリケーション リソースのロックを解放します。

Transact-SQL 構文表記規則

構文

  
sp_releaseapplock [ @Resource = ] 'resource_name'   
     [ , [ @LockOwner = ] 'lock_owner' ]  
     [ , [ @DbPrincipal = ] 'database_principal' ]  
[ ; ]  

引数

[ @Resource= ] 'resource_name'
クライアント アプリケーションで指定されたロック リソース名です。 アプリケーションは、リソースが一意であることを確認する必要があります。 指定された名前は、SQL Server ロック マネージャーに格納できる値に内部的にハッシュされます。 resource_nameは nvarchar(255) で、既定値はありません。 resource_nameはバイナリ比較であるため、現在のデータベースの照合順序設定に関係なく大文字と小文字が区別されます。

[ @LockOwner= ] 'lock_owner'
ロックの所有者を指定します。これはロックが要求されたときの lock_owner 値です。 lock_ownernvarchar (32)です。 この値は Transaction (既定値) または Session のいずれかです。 lock_owner値が Transaction場合、既定で、または明示的に指定されている場合、sp_getapplockはトランザクション内から実行する必要があります。

[ @DbPrincipal= ] 'database_principal'
データベース内のオブジェクトに対するアクセス許可を持つユーザー、ロール、またはアプリケーション ロールです。 関数を呼び出すには、database_principal、dbo、または固定データベース ロール db_owner のメンバーであることが必要です。 既定値はパブリックです。

リターン コードの値

>= 0 (成功)、または < 0 (失敗)

Value 結果
0 ロックが正常に解放されました。
-999 パラメーターの検証エラーまたはその他の呼び出しエラーです。

解説

アプリケーションで、同じロック リソースに対して sp_getapplock が複数回呼び出される場合は、同じ回数だけ sp_releaseapplock を呼び出して、ロックを解放する必要があります。

何らかの理由でサーバーがシャットダウンすると、ロックが解放されます。

アクセス許可

public ロールのメンバーシップが必要です。

次の例では、データベース内のリソース Form1 の現在のトランザクションに関連付けられているロックを AdventureWorks2022 解放します。

USE AdventureWorks2022;  
GO  
EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'Form1',   
     @LockMode = 'Shared';  
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'Form1';  
GO  

参照

APPLOCK_MODE (Transact-SQL)
APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)