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.