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