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()に限定されません。 働き。どちらの場合も、解決策は同じです。引数が関数が受け入れるデータ型であることを確認してください。