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.