Trong SQL Server, bạn có thể sử dụng sp_set_session_context
thủ tục được lưu trữ để đặt các cặp khóa / giá trị trong ngữ cảnh phiên.
Các cặp khóa / giá trị này sau đó vẫn còn trong ngữ cảnh phiên của bạn cho đến khi kết nối của bạn với SQL Server đóng. Bạn có thể sử dụng các giá trị này trong các thủ tục được lưu trữ và mã T-SQL khác trong suốt thời gian hoạt động của phiên của bạn.
Phương pháp duy trì trạng thái phiên này lần đầu tiên được giới thiệu trong SQL Server 2016. Trước bản phát hành đó, bạn cần sử dụng SET CONTEXT_INFO
, cung cấp một cách tương tự, nhưng hạn chế hơn nhiều để lưu trữ trạng thái phiên.
Ví dụ 1 - Đặt giá trị
Dưới đây là một ví dụ để minh họa cách sử dụng sp_set_session_context
để đặt cặp khóa / giá trị.
EXEC sp_set_session_context @key = N'user_id', @value = 15;
Bạn cũng có thể sử dụng cú pháp sau:
EXEC sp_set_session_context 'user_id', 15;
Ngoài ra còn có một cờ chỉ đọc tùy chọn mà bạn có thể đặt. Xem ví dụ bên dưới.
Ví dụ 2 - Đọc giá trị
Bạn có thể sử dụng SESSION_CONTEXT()
chức năng đọc giá trị của một khóa.
Đây là cách đọc giá trị tôi đã đặt trong ví dụ trước.
SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Kết quả:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Ví dụ 3 - Cập nhật giá trị
Bạn có thể cập nhật giá trị, miễn là bạn chưa chỉ định nó là chỉ đọc.
EXEC sp_set_session_context 'user_id', 73; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Kết quả:
+-----------+ | user_id | |-----------| | 73 | +-----------+
Ví dụ 4 - Đặt thành Chỉ đọc
Như đã đề cập, cũng có một cờ chỉ đọc tùy chọn mà bạn có thể đặt. Giá trị 1
đặt nó thành chỉ đọc và giá trị 0
(mặc định) không phải là chỉ đọc.
Nếu bạn đặt nó thành chỉ đọc, bạn sẽ không thể cập nhật giá trị mà không ngắt kết nối và kết nối lại với SQL Server.
Dưới đây là một ví dụ về cách đặt cờ chỉ đọc.
EXEC sp_set_session_context @key = N'user_id', @value = 15, @read_only = 1; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Kết quả:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Bây giờ, hãy thử thay đổi giá trị:
EXEC sp_set_session_context 'user_id', 73;
Kết quả:
Msg 15664, Level 16, State 1, Line 1 Cannot set key 'user_id' in the session context. The key has been set as read_only for this session.