sql >> Databasteknik >  >> RDS >> Sqlserver

Fix Msg 8116 "Argumentdatatypen varchar är ogiltig för argument 1 för session_context-funktionen" i SQL Server

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.


  1. Skapa rollbaserad åtkomstkontroll i MongoDB

  2. Hur man får antalet dagar i en månad i MySQL

  3. Skapa HTML-tabell med SQL FOR XML

  4. PostgreSQL datum och tid funktioner