次の方法で共有


sp_releaseapplock (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

sp_releaseapplock
    [ [ @Resource = ] N'Resource' ]
    [ , [ @LockOwner = ] 'LockOwner' ]
    [ , [ @DbPrincipal = ] N'DbPrincipal' ]
[ ; ]

引数

[ @Resource = ] N'Resource'

クライアント アプリケーションによって指定されたロック リソース名を指定します。 @Resourcenvarchar(255) で、既定値は NULL です。 @Resource はバイナリ比較であるため、現在のデータベースの照合順序設定に関係なく大文字と小文字が区別されます。

アプリケーションは、リソースが一意であることを確認する必要があります。 指定された名前は、SQL Server ロック マネージャーに格納できる値に内部的にハッシュされます。

[ @LockOwner = ] 'LockOwner'

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

[ @DbPrincipal = ] N'DbPrincipal'

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

リターン コードの値

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

結果
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