Se você estiver recebendo a mensagem de erro 8116 do SQL Server com a mensagem Argument data type varchar is invalid for argument 1 of session_context function , é porque você está passando o tipo de dados errado para uma função - neste caso, o
SESSION_CONTEXT()
função. Isso pode acontecer se você passar uma string literal para o
SESSION_CONTEXT()
função sem prefixá-la com o N
personagem. O mesmo erro (Msg 8116) também pode ocorrer em outros contextos – não se limita ao
SESSION_CONTEXT()
função. Por exemplo, você pode obter o mesmo erro ao usar o SUBSTRING()
função. Exemplo do erro
Aqui está um exemplo de código que produz o erro:
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.
Aqui, passei uma string como o primeiro argumento para
SESSION_CONTEXT()
, mas não prefixei com N
. O argumento fornecido para
SESSION_CONTEXT()
é a chave do valor que está sendo recuperado. Deve ser do tipo sysname
. Isso é basicamente o mesmo que nvarchar(128) NOT NULL
, o que significa que você precisa prefixar a string literal com o N
personagem. O mesmo erro (Msg 8116) pode ocorrer em muitos outros contextos – não se limita ao
SESSION_CONTEXT()
função. De qualquer forma, isso significa que você está passando o tipo de dados errado para a função.
Solução
Para resolver o problema acima, tudo o que precisamos fazer é prefixar a chave com o
N
personagem:EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT(N'language');
Resultado:
English
Problema resolvido. Tudo o que fiz foi alterar
'language'
para N'language'
. Conforme mencionado, o erro 8116 não se limita ao
SESSION_CONTEXT()
função. De qualquer forma, a solução é a mesma – certifique-se de que o argumento seja de um tipo de dados que a função aceita.