Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Napraw komunikat 8116 „Argument typ danych varchar jest nieprawidłowy dla argumentu 1 funkcji session_context” w programie SQL Server

Jeśli otrzymujesz komunikat o błędzie SQL Server 8116 z komunikatem Typ danych argumentu varchar jest nieprawidłowy dla argumentu 1 funkcji session_context , to dlatego, że przekazujesz niewłaściwy typ danych do funkcji – w tym przypadku SESSION_CONTEXT() funkcja.

Może się to zdarzyć, jeśli przekażesz literał ciągu do SESSION_CONTEXT() funkcja bez przedrostka N znak.

Ten sam błąd (Msg 8116) może również wystąpić w innych kontekstach – nie ogranicza się do SESSION_CONTEXT() funkcjonować. Na przykład możesz otrzymać ten sam błąd podczas korzystania z SUBSTRING() funkcja.

Przykład błędu

Oto przykład kodu, który generuje błąd:

EXEC sp_set_session_context 
    @key = 'language', 
    @value = 'English'; 
SELECT SESSION_CONTEXT('language');

Wynik:

Msg 8116, Level 16, State 1, Line 4
Argument data type varchar is invalid for argument 1 of session_context function.

Tutaj przekazałem ciąg znaków jako pierwszy argument do SESSION_CONTEXT() , ale nie poprzedziłem go przedrostkiem N .

Argument dostarczony do SESSION_CONTEXT() jest kluczem pobieranej wartości. Musi być typu sysname . Jest to w zasadzie to samo co nvarchar(128) NOT NULL , co oznacza, że ​​musisz poprzedzić literał ciągu znakiem N znak.

Ten sam błąd (Msg 8116) może wystąpić w wielu innych kontekstach – nie ogranicza się do SESSION_CONTEXT() funkcja.

Tak czy inaczej, oznacza to, że przekazujesz do funkcji niewłaściwy typ danych.

Rozwiązanie

Aby rozwiązać powyższy problem, wystarczy poprzedzić klucz N charakter:

EXEC sp_set_session_context 
    @key = 'language', 
    @value = 'English'; 
SELECT SESSION_CONTEXT(N'language');

Wynik:

English

Problem rozwiązany. Wszystko, co zrobiłem ze zmianą 'language' na N'language' .

Jak wspomniano, błąd 8116 nie ogranicza się do SESSION_CONTEXT() funkcjonować. Tak czy inaczej, rozwiązanie jest takie samo – upewnij się, że argument jest typu danych akceptowanego przez funkcję.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sformatować datę i godzinę w SQL Server

  2. Jak wysyłać wiadomości e-mail z serwera SQL (T-SQL)

  3. Unikalny złożony klucz składający się z dwóch pól w programie SQL Server z automatycznym przyrostem drugiego pola

  4. Jak uzyskać identyfikator Insert w MSSQL w PHP?

  5. Korzystanie ze schematów baz danych w SQL Server