Sebagian besar Anda seharusnya tidak melakukan apa-apa.
- Dimungkinkan untuk menonaktifkan peringatan dengan menyetel
ansi_warnings
off tetapi ini memiliki efek lain, mis. tentang bagaimana pembagian dengan nol ditangani dan dapat menyebabkan kegagalan saat kueri Anda menggunakan fitur seperti tampilan yang diindeks, kolom yang dihitung, atau metode XML. - Dalam beberapa kasus terbatas, Anda dapat menulis ulang agregat untuk menghindarinya. misalnya
COUNT(nullable_column)
dapat ditulis ulang sebagaiSUM(CASE WHEN nullable_column IS NULL THEN 0 ELSE 1 END)
tetapi ini tidak selalu dapat dilakukan secara langsung tanpa mengubah semantik.
Ini hanya pesan informasi yang diperlukan dalam standar SQL. Selain menambahkan suara yang tidak diinginkan ke aliran pesan, itu tidak memiliki efek buruk (selain berarti bahwa SQL Server tidak bisa hanya melewati membaca NULL
baris, yang dapat memiliki overhead tetapi menonaktifkan peringatan tidak memberikan rencana eksekusi yang lebih baik dalam hal ini)
Alasan untuk mengembalikan pesan ini adalah karena sebagian besar operasi di SQL nulls menyebar.
SELECT NULL + 3 + 7
mengembalikan NULL
(tentang NULL
sebagai kuantitas yang tidak diketahui ini masuk akal sebagai ? + 3 + 7
juga tidak diketahui)
tapi
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
Mengembalikan 10
dan peringatan bahwa nol diabaikan.
Namun ini adalah persis semantik yang Anda inginkan untuk kueri agregasi tipikal. Jika tidak, kehadiran satu NULL
berarti agregasi pada kolom itu di semua baris akan selalu menghasilkan NULL
yang tidak terlalu berguna.
Mana kue terberat di bawah ini? (Sumber Gambar, gambar Creative Commons diubah (dipotong dan diberi keterangan) oleh saya)
Setelah kue ketiga ditimbang timbangannya pecah sehingga tidak ada informasi yang tersedia tentang kue keempat tetapi masih mungkin untuk mengukur kelilingnya.
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
Kueri
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
Kembali
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
meskipun secara teknis tidak mungkin untuk mengatakan dengan pasti bahwa 80 adalah berat kue terberat (karena angka yang tidak diketahui mungkin lebih besar) hasil di atas umumnya lebih berguna daripada sekadar mengembalikan yang tidak diketahui.
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
Jadi kemungkinan besar Anda ingin NULL diabaikan, dan peringatan tersebut hanya mengingatkan Anda tentang fakta bahwa ini terjadi.