Si recibe el mensaje de error 8116 de SQL Server con el mensaje El tipo de datos del argumento varchar no es válido para el argumento 1 de la función session_context , es porque está pasando el tipo de datos incorrecto a una función; en este caso, SESSION_CONTEXT() función.
Esto puede suceder si pasa un literal de cadena a SESSION_CONTEXT() función sin prefijarla con el N personaje.
El mismo error (Msg 8116) también puede ocurrir en otros contextos; no se limita a SESSION_CONTEXT() función. Por ejemplo, podría obtener el mismo error al usar SUBSTRING() función.
Ejemplo del error
Aquí hay un ejemplo de código que produce el error:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT('language'); Resultado:
Msg 8116, Level 16, State 1, Line 4 Argument data type varchar is invalid for argument 1 of session_context function.
Aquí, pasé una cadena como primer argumento a SESSION_CONTEXT() , pero no le puse el prefijo N .
El argumento proporcionado a SESSION_CONTEXT() es la clave del valor que se está recuperando. Debe ser del tipo sysname . Esto es básicamente lo mismo que nvarchar(128) NOT NULL , lo que significa que debe anteponer el literal de cadena con el N personaje.
El mismo error (Msg 8116) puede ocurrir en muchos otros contextos; no se limita a SESSION_CONTEXT() función.
De cualquier manera, significa que está pasando el tipo de datos incorrecto a la función.
Solución
Para resolver el problema anterior, todo lo que tenemos que hacer es prefijar la clave con el N carácter:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT(N'language'); Resultado:
English
Problema resuelto. Todo lo que hice con cambiar 'language' a N'language' .
Como se mencionó, el error 8116 no se limita a SESSION_CONTEXT() función. De cualquier manera, la solución es la misma:asegúrese de que el argumento sea de un tipo de datos que acepte la función.