適用対象: SQL Server 2016 (13.x) 以降
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
現在のセッションのコンテキストで指定されたキーの値を返します。 この値は、 sp_set_session_context プロシージャを使用して設定します。
構文
SESSION_CONTEXT(N'key')
引数
'key'
取得する値のキー。 キー は sysname です。
戻り値の型
sql_variant
戻り値
セッション コンテキストで指定したキーに関連付けられている値。そのキーに値が設定されていない場合は NULL
。
アクセス許可
すべてのユーザーは、そのセッションのセッションのコンテキストを読み取ることができます。
解説
SESSION_CONTEXT
の MARS 動作は、CONTEXT_INFO
の動作と似ています。 MARS バッチでキーと値のペアが設定されている場合、新しい値を設定したバッチが完了した後に開始されない限り、同じ接続上の他の MARS バッチでは新しい値は返されません。 接続で複数の MARS バッチがアクティブな場合、値を read_only
として設定することはできません。 これにより、競合状態や、どの値が 勝つかに関する非決定的な問題が回避されます。
例
次の簡単な例では、キー user_id
のセッション コンテキスト値を 4 に設定し、 SESSION_CONTEXT
関数を使用して値を取得します。
EXECUTE sp_set_session_context 'user_id', 4;
SELECT SESSION_CONTEXT(N'user_id');
既知の問題
問題点 | 検出した日 | ステータス | 解決した日 |
---|---|---|---|
特定の条件下で、 SESSION_CONTEXT 関数でアクセス違反 (AV) 例外が発生する可能性があります。 セッションが再利用のためにリセットされるときに、並列実行プラン内で SESSION_CONTEXT 関数が実行されると、AV 例外や間違った結果が発生する可能性があります。SQL Server 2019 (15.x) CU 14 で、並列プラン内の SESSION_CONTEXT に関する間違った結果の問題に対処するために導入された修正プログラムは、後に特定の条件下で AV 例外を引き起こすことが判明しました。この問題を軽減するには、トレース フラグ 11024 をスタートアップ、グローバル、またはセッション トレース フラグとして有効にします。 このトレース フラグにより、 SESSION_CONTEXT が強制的に順次実行され、並列クエリ プランに参加できなくなります。適用対象: SQL Server 2019 (15.x) CU 14 以降のバージョン。 |
2022 年 1 月 | 回避策あり |