8

内部にトランザクションを持たないストアド プロシージャを実装しています。実際にはそうなりますが、時間を最小限に抑えるために特定のスポットでのみです。ストアド プロシージャの性質上、一度に 1 つのみ実行する必要があります。

sp_getapplock を使用しようとしましたが、トランザクション内にある必要があることがすぐにわかりました。

プロシージャ全体をロックできますが、トランザクションにラップせずに他の方法はありますか?

4

1 に答える 1

15

@LockOwner を介して Session を渡し、Session スコープのロックを取得します。これは、ロックが取得されたときにトランザクションが有効である必要はありません。

例えば

EXEC @res = sp_getapplock @Resource = 'Lock ID', @LockOwner = 'Session', @LockMode = 'Exclusive';
..
code
..

EXEC @res = sp_releaseapplock @Resource = 'Lock ID';
于 2012-07-17T23:14:42.347 に答える