Hvis du får SQL Server-fejlmeddelelse 8116 med meddelelsen Argumentdatatypen varchar er ugyldig for argument 1 i session_context-funktionen , det er fordi du sender den forkerte datatype til en funktion – i dette tilfælde SESSION_CONTEXT()
funktion.
Dette kan ske, hvis du sender en streng bogstavelig til SESSION_CONTEXT()
funktion uden at præfiksere den med N
tegn.
Den samme fejl (Msg 8116) kan også forekomme i andre sammenhænge – den er ikke begrænset til SESSION_CONTEXT()
fungere. For eksempel kan du få den samme fejl, når du bruger SUBSTRING()
funktion.
Eksempel på fejlen
Her er et eksempel på kode, der producerer fejlen:
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.
Her sendte jeg en streng som det første argument til SESSION_CONTEXT()
, men jeg præfiksede det ikke med N
.
Argumentet til SESSION_CONTEXT()
er nøglen til den værdi, der hentes. Det skal være af typen sysname
. Dette er grundlæggende det samme som nvarchar(128) NOT NULL
, hvilket betyder, at du skal præfikse strengen literal med N
tegn.
Den samme fejl (Msg 8116) kan forekomme i mange andre sammenhænge – den er ikke begrænset til SESSION_CONTEXT()
funktion.
Uanset hvad, betyder det, at du sender den forkerte datatype til funktionen.
Løsning
For at løse ovenstående problem er alt, hvad vi skal gøre, at præfikse nøglen med N
tegn:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT(N'language');
Resultat:
English
Problem løst. Alt jeg gjorde med at ændre 'language'
til N'language'
.
Som nævnt er fejl 8116 ikke begrænset til SESSION_CONTEXT()
fungere. Uanset hvad, er løsningen den samme – sørg for, at argumentet er af en datatype, som funktionen accepterer.