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

Khắc phục “Ít nhất một trong các đối số đối với COALESCE phải là một biểu thức không phải là hằng số NULL” trong SQL Server

Trong SQL Server, nếu bạn gặp lỗi Msg 4127 có nội dung “Ít nhất một trong các đối số đối với COALESCE phải là một biểu thức không phải là hằng số NULL”, có thể là do tất cả các đối số của bạn đối với COALESCE() biểu thức là NULL không đổi.

Để khắc phục sự cố này, hãy đảm bảo ít nhất một đối số không phải là NULL không đổi.

Ví dụ về Lỗi

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

SELECT COALESCE( null, null );

Chúng tôi nhận được điều này:

Msg 4127, Level 16, State 1, Line 1
At least one of the arguments to COALESCE must be an expression that is not the NULL constant.

Trong trường hợp này, tất cả các đối số là NULL hằng số, và do đó, một lỗi đã được trả về.

Giải pháp

Giải pháp rất dễ dàng. Tất cả những gì chúng ta cần làm là đảm bảo ít nhất một đối số không phải là NULL hằng số:

SELECT COALESCE(null, 'Cat', 'Dog');

Kết quả:

Cat

Trong trường hợp này, Cat là người đầu tiên không phải NULL và như vậy COALESCE() đã trả lại giá trị đó.

Như đã thấy ở đây, có thể bao gồm NULL không đổi như một đối số, miễn là cũng có ít nhất một đối số khác không NULL không đổi.

NULL Biểu thức &Cột Cơ sở dữ liệu

Lưu ý rằng NULL hằng số không giống như một biểu thức dẫn đến NULL . Và nó không giống với cột cơ sở dữ liệu có chứa NULL .

Ví dụ:nếu tất cả các đối số tham chiếu cột cơ sở dữ liệu và các cột cơ sở dữ liệu đó là NULL , thì chúng tôi không gặp lỗi.

Giả sử chúng ta chạy truy vấn sau:

SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Kết quả:

CustomerId  CustomerCategoryId
----------- ------------------
NULL        NULL

Cả hai cột đều chứa NULL giá trị.

Vì vậy, nếu chúng ta chuyển cả hai cột vào COALESCE() , chúng tôi nhận được kết quả là NULL :

SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Kết quả:

NULL

Điều này cũng đúng nếu chúng ta thay thế một trong các cột bằng NULL hằng số:

SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Kết quả:

NULL

Vì vậy, chỉ khi tất cả đối số là NULL liên tục mà chúng tôi gặp lỗi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để kết nối với mssql bằng pdo thông qua PHP và Linux?

  2. Làm cách nào để tách giá trị một cột thành nhiều giá trị cột?

  3. Kiểm tra xem RPC Out có được bật trên máy chủ được liên kết hay không

  4. Sự khác biệt về hiệu suất chính giữa kiểu dữ liệu SQL Server varchar và nvarchar là gì?

  5. Làm cách nào để loại bỏ phần thời gian của giá trị datetime (SQL Server)?