グローバル一時テーブルの使い道(SQLSERVER)

SQLSERVERの一時テーブルには、
ローカル一時テーブル(テーブル名が#〜)とグローバル一時テーブル(テーブル名が##〜)の2種類が存在します。
ローカル一時テーブルは、同一セッション内のテーブルを作成したスコープおよび子スコープからのみ参照でき、テーブルを作成したスコープの終了とともに自動的に削除されます。
それに対してグローバル一時テーブルは、別セッションからも参照でき、全ての参照がなくなったタイミングで自動的に削除されます。
通常、作業領域として一時テーブルが必要な場合、通常ローカル一時テーブルを使います。
では、グローバル一時テーブルの使い道は?

一つの例は排他処理(悲観的)です。
通常、悲観排他が必要な処理(画面オペレーションを伴うような処理)の最初に排他用のフラグをオンに更新して排他状態としておき、コミットした後、本処理を行い、処理終了のタイミングで排他フラグをオフに戻し排他状態を解除します。
ただ、これだと処理を途中で強制終了した場合に、フラグがオフに戻らず永久に排他状態となってしまうことがあります。(対策として定期的にフラグ戻しジョブを走らせたりします。)

クライアントプログラムから直接DBに接続するタイプのクラサバ型システムの場合、排他フラグをグローバル一時テーブルの存在状態に置き換えることで、この問題を簡単に解決することができます。

Webシステムなどの場合はこの方法は使えないため、排他フラグに排他時間を持たせるなどの設計が必要となります。