SQL Serverでは、SESSION_CONTEXT()
を使用できます。 現在のセッションコンテキストで指定されたキーの値を読み取る関数。
キー(キー/値のペア)を最初に設定する必要があります。これは、sp_set_session_context
を使用して実行できます。 ストアドプロシージャ。
キーと値のペアがセッションに設定されると、SESSION_CONTEXT()
を使用できます。 そのキーの値を返します。
例1-値を設定して返す
これは、基本的な概念と使用法を示す例です。
EXEC sp_set_session_context @key = N'user_id', @value = 15; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
結果:
+-----------+ | user_id | |-----------| | 15 | +-----------+
例2–キーが存在しない場合
存在しないキーから値を取得しようとすると、次のようになります。
SELECT SESSION_CONTEXT(N'oops') AS oops;
結果:
+--------+ | oops | |--------| | NULL | +--------+
例3–「N」プレフィックス
SESSION_CONTEXT()
に提供される引数 タイプはsysnameです 。基本的に、これはnvarchar(128) NOT NULL
と同じです。 、つまり、引数の前にN
を付ける必要があります キャラクター。
N
を削除するとどうなりますか プレフィックス:
EXEC sp_set_session_context @key = 'language', @value = 'English'; SELECT SESSION_CONTEXT('language') AS language;
結果:
Msg 8116, Level 16, State 1, Line 5 Argument data type varchar is invalid for argument 1 of session_context function.
N
を削除する プレフィックス、 varcharを渡すだけです 、 nvarcharである必要がある場合 (または sysname 正確には)。
これがN
です プレフィックス:
EXEC sp_set_session_context @key = N'language', @value = 'English'; SELECT SESSION_CONTEXT(N'language') AS language;
結果:
+------------+ | language | |------------| | English | +------------+
例4–戻り値
SESSION_CONTEXT()
の戻りタイプ sql_variantです 。
SQL_VARIANT_PROPERTY()
を使用できます 基本タイプを見つけるための関数。
例:
SELECT SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'user_id'), 'BaseType' ) AS user_id, SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'language'), 'BaseType' ) AS language;
結果:
+-----------+------------+ | user_id | language | |-----------+------------| | int | varchar | +-----------+------------+
例5–戻り値の連結
複数の結果を連結する必要がある場合は、結果を sql_variant以外のデータ型に変換する必要があります 最初。
これを行わないとどうなるかの例を次に示します。
例:
EXEC sp_set_session_context N'user_fname', 'Homer'; EXEC sp_set_session_context N'user_lname', 'Simpson'; SELECT CONCAT( SESSION_CONTEXT(N'user_fname'), SESSION_CONTEXT(N'user_lname') ) AS Result;>
結果:
Msg 257, Level 16, State 3, Line 1 Implicit conversion from data type sql_variant to varchar is not allowed. Use the CONVERT function to run this query.
したがって、CAST()
のいずれかを使用して結果を明示的に変換する必要があります またはCONVERT()
それらを連結する前に。
例:
EXEC sp_set_session_context N'user_fname', 'Homer'; EXEC sp_set_session_context N'user_lname', 'Simpson'; SELECT CONCAT( CAST(SESSION_CONTEXT(N'user_fname') AS varchar(5)), CAST(SESSION_CONTEXT(N'user_lname') AS varchar(7)) ) AS Result;
結果:
+--------------+ | Result | |--------------| | HomerSimpson | +--------------+