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

Sửa lỗi Msg 8116 “Kiểu dữ liệu đối số varchar không hợp lệ cho đối số 1 của hàm session_context” trong SQL Server

Nếu bạn gặp lỗi Máy chủ SQL Msg 8116 với thông báo Kiểu dữ liệu đối số varchar không hợp lệ cho đối số 1 của hàm session_context , đó là do bạn đang chuyển sai loại dữ liệu cho một hàm - trong trường hợp này là SESSION_CONTEXT() chức năng.

Điều này có thể xảy ra nếu bạn chuyển một chuỗi ký tự vào SESSION_CONTEXT() hàm mà không cần đặt tiền tố bằng N nhân vật.

Lỗi tương tự (Msg 8116) cũng có thể xảy ra trong các ngữ cảnh khác - nó không giới hạn ở SESSION_CONTEXT() hàm số. Ví dụ:bạn có thể gặp lỗi tương tự khi sử dụng SUBSTRING() chức năng.

Ví dụ về lỗi

Dưới đây là một ví dụ về mã tạo ra lỗi:

EXEC sp_set_session_context 
    @key = 'language', 
    @value = 'English'; 
SELECT SESSION_CONTEXT('language');

Kết quả:

Msg 8116, Level 16, State 1, Line 4
Argument data type varchar is invalid for argument 1 of session_context function.

Ở đây, tôi đã chuyển một chuỗi làm đối số đầu tiên cho SESSION_CONTEXT() , nhưng tôi không đặt tiền tố nó bằng N .

Đối số được cung cấp cho SESSION_CONTEXT() là khóa của giá trị đang được truy xuất. Nó phải thuộc loại sysname . Điều này về cơ bản giống với nvarchar(128) NOT NULL , có nghĩa là bạn cần đặt tiền tố chuỗi ký tự bằng N nhân vật.

Lỗi tương tự (Msg 8116) có thể xảy ra trong nhiều ngữ cảnh khác - nó không giới hạn ở SESSION_CONTEXT() chức năng.

Dù bằng cách nào, điều đó có nghĩa là bạn đang chuyển sai loại dữ liệu cho hàm.

Giải pháp

Để giải quyết vấn đề trên, tất cả những gì chúng ta cần làm là đặt tiền tố cho khóa bằng N nhân vật:

EXEC sp_set_session_context 
    @key = 'language', 
    @value = 'English'; 
SELECT SESSION_CONTEXT(N'language');

Kết quả:

English

Vấn đề đã được giải quyết. Tất cả những gì tôi đã làm với thay đổi 'language' sang N'language' .

Như đã đề cập, lỗi 8116 không giới hạn ở SESSION_CONTEXT() hàm số. Dù bằng cách nào thì giải pháp cũng giống nhau - đảm bảo rằng đối số thuộc kiểu dữ liệu mà hàm chấp nhận.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Tác động đến hiệu suất của Luôn được mã hóa

  2. Công cụ cho dữ liệu bảng kịch bản

  3. Chỉ chèn một hàng nếu nó chưa có ở đó

  4. Cách chèn một đốm màu vào cơ sở dữ liệu bằng studio quản lý máy chủ sql

  5. Làm cách nào để bạn có được các tìm kiếm toàn văn bằng ký tự đại diện hàng đầu hoạt động trong SQL Server?