sql >> Database teknologi >  >> RDS >> Sqlserver

Fix Msg 8116 "Argumentdatatype varchar er ugyldig for argument 1 for session_context-funktionen" i SQL Server

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.


  1. Sådan rettes dobbeltkodede UTF8-tegn (i en utf-8-tabel)

  2. Sådan bruger du UPDATE fra SELECT i SQL Server

  3. Hvordan opretter man en SQL-visning med SQLAlchemy?

  4. SQLite JSON_QUOTE()