Se ricevi un messaggio di errore SQL Server 8116 con il messaggio Il tipo di dati dell'argomento varchar non è valido per l'argomento 1 della funzione session_context , è perché stai passando il tipo di dati sbagliato a una funzione, in questo caso il SESSION_CONTEXT()
funzione.
Questo può accadere se passi una stringa letterale a SESSION_CONTEXT()
funzione senza anteporre il N
carattere.
Lo stesso errore (Msg 8116) può verificarsi anche in altri contesti:non è limitato a SESSION_CONTEXT()
funzione. Ad esempio, potresti ricevere lo stesso errore quando usi SUBSTRING()
funzione.
Esempio di errore
Ecco un esempio di codice che produce l'errore:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT('language');
Risultato:
Msg 8116, Level 16, State 1, Line 4 Argument data type varchar is invalid for argument 1 of session_context function.
Qui, ho passato una stringa come primo argomento a SESSION_CONTEXT()
, ma non l'ho preceduto con N
.
L'argomento fornito a SESSION_CONTEXT()
è la chiave del valore da recuperare. Deve essere di tipo sysname
. Questo è fondamentalmente lo stesso di nvarchar(128) NOT NULL
, il che significa che devi anteporre alla stringa letterale il N
carattere.
Lo stesso errore (Msg 8116) può verificarsi in molti altri contesti:non è limitato a SESSION_CONTEXT()
funzione.
In ogni caso, significa che stai passando il tipo di dati sbagliato alla funzione.
Soluzione
Per risolvere il problema di cui sopra, tutto ciò che dobbiamo fare è anteporre alla chiave il N
carattere:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT(N'language');
Risultato:
English
Problema risolto. Tutto quello che ho fatto con cambiare 'language'
a N'language'
.
Come accennato, l'errore 8116 non è limitato a SESSION_CONTEXT()
funzione. In ogni caso, la soluzione è la stessa:assicurati che l'argomento sia di un tipo di dati accettato dalla funzione.