Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbaiki Msg 8116 "Argument data type varchar is invalid for argument 1 of session_context function" di SQL Server

Jika Anda mendapatkan kesalahan SQL Server Msg 8116 dengan pesan Argument data type varchar is invalid for argument 1 of session_context function , itu karena Anda meneruskan tipe data yang salah ke suatu fungsi – dalam hal ini SESSION_CONTEXT() fungsi.

Ini dapat terjadi jika Anda meneruskan string literal ke SESSION_CONTEXT() fungsi tanpa awalan dengan N karakter.

Kesalahan yang sama (Msg 8116) juga dapat terjadi dalam konteks lain – tidak terbatas pada SESSION_CONTEXT() fungsi. Misalnya, Anda bisa mendapatkan kesalahan yang sama saat menggunakan SUBSTRING() fungsi.

Contoh Kesalahan

Berikut contoh kode yang menghasilkan kesalahan:

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

Hasil:

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

Di sini, saya meneruskan string sebagai argumen pertama ke SESSION_CONTEXT() , tapi saya tidak mengawalinya dengan N .

Argumen yang diberikan ke SESSION_CONTEXT() adalah kunci dari nilai yang diambil. Itu harus bertipe sysname . Ini pada dasarnya sama dengan nvarchar(128) NOT NULL , yang berarti Anda harus mengawali literal string dengan N karakter.

Kesalahan yang sama (Msg 8116) dapat terjadi di banyak konteks lain – tidak terbatas pada SESSION_CONTEXT() fungsi.

Apa pun itu, itu berarti Anda meneruskan tipe data yang salah ke fungsi tersebut.

Solusi

Untuk mengatasi masalah di atas, yang perlu kita lakukan adalah memberi awalan kunci dengan N karakter:

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

Hasil:

English

Masalah terpecahkan. Semua saya lakukan dengan mengubah 'language' ke N'language' .

Seperti yang disebutkan, kesalahan 8116 tidak terbatas pada SESSION_CONTEXT() fungsi. Bagaimanapun, solusinya sama – pastikan argumennya bertipe data yang diterima fungsi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INT vs Unique-Identifier untuk bidang ID di database

  2. Cara Mengembalikan Hanya Nilai Numerik di SQL Server

  3. Menghubungkan ke SQL Server LocalDB menggunakan JDBC

  4. Masukkan semua data datagridview ke database sekaligus

  5. Bagaimana LEFT OUTER JOIN mengembalikan lebih banyak catatan daripada yang ada di tabel kiri?