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.