Di SQL Server, Anda dapat menggunakan SESSION_CONTEXT()
berfungsi untuk membaca nilai kunci yang ditentukan dalam konteks sesi saat ini.
Kunci (pasangan kunci/nilai) perlu diatur terlebih dahulu. Ini dapat dilakukan dengan sp_set_session_context
prosedur tersimpan.
Setelah pasangan kunci/nilai ditetapkan untuk sesi, Anda dapat menggunakan SESSION_CONTEXT()
untuk mengembalikan nilai kunci itu.
Contoh 1 – Tetapkan &Kembalikan Nilainya
Berikut adalah contoh yang menunjukkan konsep dasar dan penggunaan.
EXEC sp_set_session_context @key =N'user_id', @value =15;SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Hasil:
+-----------+| user_id ||-----------|| 15 |+-----------+
Contoh 2 – Saat Kunci Tidak Ada
Inilah yang terjadi jika Anda mencoba mendapatkan nilai dari kunci yang tidak ada.
SELECT SESSION_CONTEXT(N'oops') AS ups;
Hasil:
+--------+| ups ||--------|| NULL |+--------+
Contoh 3 – Awalan “N”
Argumen yang diberikan ke SESSION_CONTEXT()
bertipe sysname . Pada dasarnya, ini sama dengan nvarchar(128) NOT NULL
, yang berarti Anda harus mengawali argumen dengan N
karakter.
Inilah yang terjadi jika saya menghapus N
awalan:
EXEC sp_set_session_context @key ='language', @value ='English';SELECT SESSION_CONTEXT('language') AS language;
Hasil:
Msg 8116, Level 16, Status 1, Baris 5Tipe data argumen varchar tidak valid untuk argumen 1 fungsi session_context.
Dengan menghapus N
awalan, saya hanya memberikan varchar , padahal seharusnya nvarchar (atau nama sistem tepatnya).
Ini dia dengan N
awalan:
EXEC sp_set_session_context @key =N'language', @value ='English';SELECT SESSION_CONTEXT(N'language') AS language;
Hasil:
+------------+| bahasa ||-------------|| Bahasa Inggris |+------------+
Contoh 4 – Nilai Pengembalian
Jenis kembalian SESSION_CONTEXT()
adalah sql_variant .
Anda dapat menggunakan SQL_VARIANT_PROPERTY()
berfungsi untuk mengetahui tipe dasar.
Contoh:
SELECT SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'user_id'), 'BaseType' ) AS user_id, SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'language'), 'BaseType' ) SEBAGAI bahasa;
Hasil:
+-----------+------------+| ID_pengguna | bahasa ||-----------+------------|| int | varchar |+------------+------------+
Contoh 5 – Menggabungkan Nilai Pengembalian
Jika Anda perlu menggabungkan beberapa hasil, Anda harus mengonversi hasilnya ke tipe data selain sql_variant pertama.
Berikut ini contoh apa yang terjadi jika saya tidak melakukan ini:
Contoh:
EXEC sp_set_session_context N'user_fname', 'Homer';EXEC sp_set_session_context N'user_lname', 'Simpson';SELECT CONCAT( SESSION_CONTEXT(N'user_fname'), SESSION_CONTEXT(N'user_lname') ) SEBAGAI Hasil>Hasil:
Msg 257, Level 16, State 3, Line 1Konversi implisit dari tipe data sql_variant ke varchar tidak diperbolehkan. Gunakan fungsi CONVERT untuk menjalankan kueri ini.Jadi saya perlu secara eksplisit mengonversi hasil menggunakan
CAST()
atauCONVERT()
sebelum menggabungkannya.Contoh:
EXEC sp_set_session_context N'user_fname', 'Homer';EXEC sp_set_session_context N'user_lname', 'Simpson';SELECT CONCAT( CAST(SESSION_CONTEXT(N'user_fname') AS varchar(5)), CAST(SESSION_CONTEXT(N' user_lname') AS varchar(7)) ) AS Hasil;Hasil:
+-------------+| Hasil ||--------------|| HomerSimpson |+--------------+