Chủ yếu là bạn không nên làm gì về nó.
- Có thể tắt cảnh báo bằng cách đặt
ansi_warnings
tắt nhưng điều này có tác dụng khác, ví dụ:về cách xử lý phép chia cho 0 và có thể gây ra lỗi khi truy vấn của bạn sử dụng các tính năng như dạng xem được lập chỉ mục, cột được tính toán hoặc phương thức XML. - Trong một số trường hợp hạn chế, bạn có thể viết lại phần tổng hợp để tránh nó. ví dụ.
COUNT(nullable_column)
có thể được viết lại dưới dạngSUM(CASE WHEN nullable_column IS NULL THEN 0 ELSE 1 END)
nhưng điều này không phải lúc nào cũng có thể thực hiện một cách đơn giản mà không thay đổi ngữ nghĩa.
Nó chỉ là một thông báo thông tin cần thiết trong tiêu chuẩn SQL. Ngoài việc thêm tiếng ồn không mong muốn vào luồng thông báo, nó không có tác dụng xấu nào (ngoại trừ việc SQL Server không thể bỏ qua việc đọc NULL
hàng, có thể có chi phí cao nhưng việc tắt cảnh báo không mang lại kế hoạch thực thi tốt hơn về mặt này)
Lý do trả lại thông báo này là trong hầu hết các hoạt động trong SQL đều có giá trị null.
SELECT NULL + 3 + 7
trả về NULL
(liên quan đến NULL
như một đại lượng không xác định, điều này có nghĩa là ? + 3 + 7
cũng không xác định)
nhưng
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
Trả về 10
và cảnh báo rằng giá trị rỗng đã bị bỏ qua.
Tuy nhiên, đây là chính xác ngữ nghĩa bạn muốn cho các truy vấn tổng hợp điển hình. Nếu không, sự hiện diện của một NULL
có nghĩa là các tổng hợp trên cột đó trên tất cả các hàng sẽ luôn mang lại NULL
không hữu ích lắm.
Chiếc bánh nào nặng nhất dưới đây? (Nguồn hình ảnh, hình ảnh Creative Commons được tôi thay đổi (cắt và chú thích))
Sau khi cân chiếc bánh thứ ba, chiếc cân bị vỡ và vì vậy không có thông tin về chiếc thứ tư nhưng vẫn có thể đo được chu vi.
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
Truy vấn
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
Trả lại
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
mặc dù về mặt kỹ thuật, không thể nói chắc chắn rằng 80 là trọng lượng của chiếc bánh nặng nhất (vì ẩn số có thể lớn hơn), nhưng kết quả trên thường hữu ích hơn là chỉ trả về ẩn số.
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
Vì vậy, có khả năng bạn muốn NULL bị bỏ qua và cảnh báo chỉ cảnh báo bạn thực tế rằng điều này đang xảy ra.