sql >> データベース >  >> RDS >> Sqlserver

SQLServerのメッセージ8116「引数データ型varcharがsession_context関数の引数1に対して無効です」を修正しました

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


    1. 応答ファイルの自動生成

    2. Postgres列が存在しません

    3. EntityFrameworkをインストールせずに動作するようにODP.NETをデプロイおよび構成する

    4. MySQLのローリングアップグレードを実行する方法