Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đặt các cặp khóa / giá trị trong ngữ cảnh phiên trong SQL Server (sp_set_session_context)

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. 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sửa đổi công việc tác nhân máy chủ SQL (T-SQL)

  2. Theo dõi tuổi thọ trang trong SQL Server

  3. Cách liên kết cơ sở dữ liệu Access với SQL Server trong Access 2016

  4. Chuyển mảng int sang proc được lưu trữ T-SQL thông qua khung thực thể

  5. Lấy tất cả các tên bảng của một cơ sở dữ liệu cụ thể bằng truy vấn SQL?