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.