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

Nhận cảnh báo:Giá trị rỗng bị loại bỏ bởi hoạt động tổng hợp hoặc SET khác

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ạng SUM(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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính toán khoảng cách giữa hai điểm (Vĩ độ, Kinh độ)

  2. Hợp nhất phiên bản SQL Server bằng cách phân cụm và xếp chồng

  3. Thế tiến thoái lưỡng nan về đặt tên bảng:Tên số ít so với số nhiều

  4. Tập lệnh để loại bỏ tất cả các kết nối đến cơ sở dữ liệu (Hơn RESTRICTED_USER ROLLBACK)

  5. JSON_QUERY () Ví dụ trong SQL Server (T-SQL)