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.