Di SQL Server, jika Anda mendapatkan pesan kesalahan Msg 4127 yang berbunyi "Setidaknya salah satu argumen untuk COALESCE harus berupa ekspresi yang bukan konstanta NULL", itu mungkin karena semua argumen Anda ke COALESCE() ekspresinya adalah NULL konstan.
Untuk memperbaiki masalah ini, pastikan setidaknya satu argumen bukan NULL konstan.
Contoh Kesalahan
Berikut adalah contoh kode yang menghasilkan kesalahan ini:
SELECT COALESCE( null, null ); Kami mendapatkan ini:
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.
Dalam hal ini, semua argumen adalah NULL konstan, dan kesalahan dikembalikan.
Solusi
Solusinya mudah. Yang perlu kita lakukan adalah memastikan setidaknya satu argumen bukan NULL konstan:
SELECT COALESCE(null, 'Cat', 'Dog'); Hasil:
Cat
Dalam hal ini, Cat adalah yang pertama non-NULL argumen, dan jadi COALESCE() mengembalikan nilai tersebut.
Seperti yang terlihat di sini, boleh saja menyertakan NULL konstan sebagai argumen, selama setidaknya ada satu argumen lain yang tidak NULL konstan.
NULL Ekspresi &Kolom Basis Data
Perhatikan bahwa NULL konstanta tidak sama dengan ekspresi yang menghasilkan NULL . Dan itu tidak sama dengan kolom database yang berisi NULL .
Misalnya, jika semua argumen mereferensikan kolom database, dan kolom database tersebut adalah NULL , maka kita tidak mendapatkan kesalahan.
Misalkan kita menjalankan kueri berikut:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Hasil:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Kedua kolom berisi NULL nilai.
Jadi jika kita meneruskan kedua kolom ke COALESCE() , kita mendapatkan hasil dari NULL :
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Hasil:
NULL
Hal yang sama berlaku jika kita mengganti salah satu kolom dengan NULL konstan:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Hasil:
NULL
Jadi hanya ketika semua argumennya adalah NULL konstan sehingga kita mendapatkan kesalahan.