Om du får SQL Server-felmeddelande 8116 med meddelandet Argumentdatatypen varchar är ogiltig för argument 1 för session_context-funktionen , det beror på att du skickar fel datatyp till en funktion – i det här fallet SESSION_CONTEXT()
funktion.
Detta kan hända om du skickar en bokstavlig sträng till SESSION_CONTEXT()
funktion utan att prefixet N
tecken.
Samma fel (Msg 8116) kan också uppstå i andra sammanhang – det är inte begränsat till SESSION_CONTEXT()
fungera. Till exempel kan du få samma fel när du använder SUBSTRING()
funktion.
Exempel på felet
Här är ett exempel på kod som ger felet:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT('language');
Resultat:
Msg 8116, Level 16, State 1, Line 4 Argument data type varchar is invalid for argument 1 of session_context function.
Här skickade jag en sträng som första argument till SESSION_CONTEXT()
, men jag prefix det inte med N
.
Argumentet till SESSION_CONTEXT()
är nyckeln till värdet som hämtas. Det måste vara av typen sysname
. Detta är i princip samma sak som nvarchar(128) NOT NULL
, vilket betyder att du måste prefixa strängen literal med N
tecken.
Samma fel (Msg 8116) kan uppstå i många andra sammanhang – det är inte begränsat till SESSION_CONTEXT()
funktion.
Oavsett vilket betyder det att du skickar fel datatyp till funktionen.
Lösning
För att lösa problemet ovan behöver vi bara prefixa nyckeln med N
tecken:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT(N'language');
Resultat:
English
Problemet löst. Allt jag gjorde med att ändra 'language'
till N'language'
.
Som nämnts är fel 8116 inte begränsat till SESSION_CONTEXT()
fungera. Oavsett vilket är lösningen densamma – se till att argumentet är av en datatyp som funktionen accepterar.