SQLServerエラーメッセージ8116が表示された場合引数データ型varcharはsession_context関数の引数1に対して無効です 、これは、関数に間違ったデータ型を渡しているためです。この場合は、SESSION_CONTEXT()
機能。
これは、文字列リテラルをSESSION_CONTEXT()
に渡すと発生する可能性があります N
を前に付けずに機能する キャラクター。
同じエラー(メッセージ8116)は、他のコンテキストでも発生する可能性があります。これは、SESSION_CONTEXT()
に限定されません。 働き。たとえば、SUBSTRING()
を使用した場合にも同じエラーが発生する可能性があります 機能。
エラーの例
エラーを生成するコードの例を次に示します。
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT('language');
結果:
Msg 8116, Level 16, State 1, Line 4 Argument data type varchar is invalid for argument 1 of session_context function.
ここでは、最初の引数として文字列をSESSION_CONTEXT()
に渡しました。 、ただし、プレフィックスとしてN
を付けませんでした 。
SESSION_CONTEXT()
に提供される引数 取得する値のキーです。タイプはsysname
である必要があります 。これは基本的にnvarchar(128) NOT NULL
と同じです 、つまり、文字列リテラルの前にN
を付ける必要があります キャラクター。
同じエラー(メッセージ8116)は、他の多くのコンテキストでも発生する可能性があります。これは、SESSION_CONTEXT()
に限定されません。 機能。
いずれにせよ、それは間違ったデータ型を関数に渡していることを意味します。
解決策
上記の問題を解決するには、キーの前にN
を付けるだけです。 キャラクター:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT(N'language');
結果:
English
問題が解決しました。 'language'
を変更して行ったすべて N'language'
。
前述のように、エラー8116はSESSION_CONTEXT()
に限定されません。 働き。どちらの場合も、解決策は同じです。引数が関数が受け入れるデータ型であることを確認してください。