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

Bagaimana SESSION_CONTEXT() Bekerja di SQL Server

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() atau CONVERT() 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 |+--------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 Cara Mendapatkan Job Steps dari SQL Server Agent Job (T-SQL)

  2. Ketahui hubungan antara semua tabel database di SQL Server

  3. Wawasan tentang Batasan Unik SQL Server

  4. SQL Server:Kolom ke Baris

  5. Bagaimana cara melakukan GROUP BY pada kolom alias di MS-SQL Server?