sql >> Databáze >  >> RDS >> Sqlserver

Oprava Msg 8116 „Datový typ argumentu varchar je neplatný pro argument 1 funkce session_context“ v SQL Server

Pokud se vám zobrazuje chyba SQL Server Msg 8116 se zprávou Datový typ argumentu varchar je neplatný pro argument 1 funkce session_context , je to proto, že do funkce předáváte nesprávný datový typ – v tomto případě SESSION_CONTEXT() funkce.

To se může stát, pokud předáte řetězcový literál do SESSION_CONTEXT() funkce bez předpony N postava.

Stejná chyba (Msg 8116) se může vyskytnout i v jiných kontextech – není omezena na SESSION_CONTEXT() funkce. Stejnou chybu můžete získat například při použití SUBSTRING() funkce.

Příklad chyby

Zde je příklad kódu, který způsobuje chybu:

EXEC sp_set_session_context 
    @key = 'language', 
    @value = 'English'; 
SELECT SESSION_CONTEXT('language');

Výsledek:

Msg 8116, Level 16, State 1, Line 4
Argument data type varchar is invalid for argument 1 of session_context function.

Zde jsem předal řetězec jako první argument do SESSION_CONTEXT() , ale nedal jsem mu předponu N .

Argument poskytnutý SESSION_CONTEXT() je klíč načítané hodnoty. Musí být typu sysname . To je v podstatě stejné jako nvarchar(128) NOT NULL , což znamená, že musíte před řetězcový literál přidat N postava.

Ke stejné chybě (Msg 8116) může dojít v mnoha jiných kontextech – není omezena na SESSION_CONTEXT() funkce.

V každém případě to znamená, že funkci předáváte nesprávný datový typ.

Řešení

Abychom vyřešili výše uvedený problém, vše, co musíme udělat, je zadat před klíč předponu N postava:

EXEC sp_set_session_context 
    @key = 'language', 
    @value = 'English'; 
SELECT SESSION_CONTEXT(N'language');

Výsledek:

English

Problém je vyřešen. Vše, co jsem udělal se změnou 'language' na N'language' .

Jak již bylo zmíněno, chyba 8116 není omezena na SESSION_CONTEXT() funkce. V každém případě je řešení stejné – ujistěte se, že argument je datového typu, který funkce přijímá.


  1. Nelze se připojit k PostgreSQL pomocí PHP pg_connect()

  2. Je na serveru SQL Server LastIndexOf?

  3. Proč cast/konvertovat z int vrátí hvězdičku

  4. Kombinujte více příkazů SELECT