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

Cách SESSION_CONTEXT () hoạt động trong SQL Server

Trong SQL Server, bạn có thể sử dụng SESSION_CONTEXT() hàm để đọc giá trị của một khóa được chỉ định trong ngữ cảnh phiên hiện tại.

Khóa (cặp khóa / giá trị) cần được đặt trước. Điều này có thể được thực hiện với sp_set_session_context thủ tục được lưu trữ.

Sau khi một cặp khóa / giá trị đã được đặt cho phiên, bạn có thể sử dụng SESSION_CONTEXT() để trả về giá trị của khóa đó.

Ví dụ 1 - Đặt &Trả lại Giá trị

Dưới đây là một ví dụ minh họa khái niệm và cách sử dụng cơ bản.

 EXEC sp_set_session_context @key =N'user_id ', @value =15; CHỌN SESSION_CONTEXT (N'user_id') AS user_id; 

Kết quả:

 + ----------- + | user_id || ----------- || 15 | + ----------- + 

Ví dụ 2 - Khi một khóa không tồn tại

Đây là điều sẽ xảy ra nếu bạn cố gắng lấy giá trị từ một khóa không tồn tại.

 SELECT SESSION_CONTEXT (N'oops ') AS oops; 

Kết quả:

 + -------- + | oops || -------- || NULL | + -------- + 

Ví dụ 3 - Tiền tố “N”

Đối số được cung cấp cho SESSION_CONTEXT() thuộc loại sysname . Về cơ bản, điều này giống với nvarchar(128) NOT NULL , có nghĩa là bạn cần đặt trước đối số bằng N nhân vật.

Đây là những gì sẽ xảy ra nếu tôi xóa N tiền tố:

 EXEC sp_set_session_context @key ='language', @value ='English'; SELECT SESSION_CONTEXT ('language') AS ngôn ngữ; 

Kết quả:

 Msg 8116, Mức 16, Trạng thái 1, Dòng 5 Kiểu dữ liệu đối số varchar không hợp lệ cho đối số 1 của hàm session_context. 

Bằng cách xóa N tiền tố, tôi chỉ đơn giản là chuyển vào varchar , khi nó phải là nvarchar (hoặc sysname chinh xac).

Đây là với N tiền tố:

 EXEC sp_set_session_context @key =N'language ', @value =' English '; SELECT SESSION_CONTEXT (N'language') AS ngôn ngữ; 

Kết quả:

 + ------------ + | tiếng || ------------ || Tiếng Anh | + ------------ + 

Ví dụ 4 - Giá trị trả lại

Loại trả về của SESSION_CONTEXT() sql_variant .

Bạn có thể sử dụng SQL_VARIANT_PROPERTY() để tìm ra loại cơ sở.

Ví dụ:

 SELECT SQL_VARIANT_PROPERTY (SESSION_CONTEXT (N'user_id '),' BaseType ') AS user_id, SQL_VARIANT_PROPERTY (SESSION_CONTEXT (N'language'), 'BaseType') AS ngôn ngữ; 

Kết quả:

 + ----------- + ------------ + | user_id | tiếng || ----------- + ------------ || int | varchar | + ----------- + ------------ + 

Ví dụ 5 - Kết hợp các giá trị trả lại

Nếu bạn cần nối nhiều kết quả, bạn sẽ cần chuyển đổi kết quả sang loại dữ liệu khác với sql_variant Đầu tiên.

Dưới đây là một ví dụ về điều gì sẽ xảy ra nếu tôi không làm điều này:

Ví dụ:

 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')) AS Kết quả;> 

Kết quả:

 Msg 257, Mức 16, Trạng thái 3, Dòng 1 Không cho phép chuyển đổi rõ ràng từ kiểu dữ liệu sql_variant sang varchar. Sử dụng hàm CHUYỂN ĐỔI để chạy truy vấn này. 

Vì vậy, tôi cần chuyển đổi kết quả một cách rõ ràng bằng cách sử dụng CAST() hoặc CONVERT() trước khi nối chúng.

Ví dụ:

 EXEC sp_set_session_context N'user_fname ',' Homer '; EXEC sp_set_session_context N'user_lname', 'Simpson'; CHỌN CONCAT (CAST (SESSION_CONTEXT (N'user_fname ') AS varchar (5)), CAST (SESSION_CONTEXT (SESSION_CONTEXT) user_lname ') AS varchar (7))) AS Kết quả; 

Kết quả:

 + -------------- + | Kết quả || -------------- || 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. Cách nhanh nhất để liệt kê tất cả cơ sở dữ liệu trong SQL Server bằng T-SQL

  2. Cách cài đặt SQL Server trên máy Mac

  3. Sử dụng GO trong một giao dịch

  4. Các kỹ thuật tốt hơn để cắt bớt các số không ở đầu trong SQL Server?

  5. Cách bật tính năng ghi dữ liệu thay đổi (CDC) trên cơ sở dữ liệu trong SQL Server - Hướng dẫn sử dụng máy chủ SQL