次の方法で共有


SESSION_CONTEXT (Transact-SQL)

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

現在のセッションのコンテキストで指定されたキーの値を返します。 この値は、 sp_set_session_context プロシージャを使用して設定します。

Transact-SQL 構文表記規則

構文

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 月 回避策あり