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.