Bagikan melalui


SESSION_CONTEXT (T-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceTitik akhir analitik SQLAzure Synapse Analytics di Microsoft Fabric Warehouse dalam database Microsoft FabricSQL di Microsoft Fabric

Mengembalikan nilai kunci yang ditentukan dalam konteks sesi saat ini. Nilai diatur dengan menggunakan prosedur sp_set_session_context .

Konvensi sintaks transact-SQL

Sintaks

SESSION_CONTEXT(N'key')

Argumen

'kunci'

Kunci nilai yang diambil. kuncinya adalah sysname.

Tipe pengembalian

aql_variant

Mengembalikan nilai

Nilai yang terkait dengan kunci yang ditentukan dalam konteks sesi, atau NULL jika tidak ada nilai yang diatur untuk kunci tersebut.

Izin

Setiap pengguna dapat membaca konteks sesi untuk sesi mereka.

Keterangan

Perilaku MARS untuk SESSION_CONTEXT' mirip CONTEXT_INFOdengan . Jika batch MARS menetapkan pasangan kunci-nilai, nilai baru tidak dikembalikan dalam batch MARS lainnya pada koneksi yang sama kecuali dimulai setelah batch yang menetapkan nilai baru selesai. Jika beberapa batch MARS aktif pada koneksi, nilai tidak dapat diatur sebagai read_only. Ini mencegah kondisi ras dan nondeterminisme tentang nilai mana yang menang.

Contoh

Contoh sederhana berikut mengatur nilai konteks sesi untuk kunci user_id ke 4, lalu menggunakan SESSION_CONTEXT fungsi untuk mengambil nilai.

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

Masalah yang diketahui

Masalah Tanggal ditemukan Kedudukan Tanggal penyelesaian
Pengecualian Pelanggaran Akses (AV) mungkin terjadi dengan fungsi dalam SESSION_CONTEXT kondisi tertentu. Anda mungkin mengalami pengecualian AV atau hasil yang salah saat SESSION_CONTEXT fungsi berjalan dalam rencana eksekusi paralel saat sesi diatur ulang untuk digunakan kembali.

Perbaikan, yang diperkenalkan di SQL Server 2019 (15.x) CU 14 untuk mengatasi masalah hasil yang salah dalam SESSION_CONTEXT rencana paralel, kemudian ditemukan menyebabkan pengecualian AV dalam kondisi tertentu.

Untuk mengurangi masalah ini, Anda dapat mengaktifkan bendera pelacakan 11042 sebagai bendera startup, global, atau pelacakan sesi. Bendera pelacakan ini memaksa SESSION_CONTEXT untuk menjalankan secara serial, mencegahnya berpartisipasi dalam rencana kueri paralel.

Berlaku untuk: SQL Server 2019 (15.x) CU 14 dan versi yang lebih baru.
Januari 2022 Memiliki solusi