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á.