Jika Anda mendapatkan error Msg 4151 “Tipe argumen pertama ke NULLIF tidak dapat berupa konstanta NULL karena tipe argumen pertama harus diketahui ” di SQL Server, ini karena Anda melewatkan nilai null sebagai argumen pertama ke NULLIF()
fungsi.
Untuk memperbaiki kesalahan ini, pastikan Anda tidak meneruskan konstanta nol sebagai argumen pertama ke fungsi. Atau jika Anda melakukannya, konversikan ke tipe data tertentu.
Contoh Kesalahan
Berikut contoh kode yang menghasilkan kesalahan:
SELECT NULLIF(null, 7);
Hasil:
Msg 4151, Level 16, State 1, Line 1 The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.
Di SQL Server, NULLIF()
nilai kembalian fungsi menggunakan tipe data dari ekspresi pertama. Ini berarti bahwa nilai pertama tidak boleh berupa konstanta nol, mengingat konstanta nol tidak memiliki tipe data yang diketahui.
Kesalahan ini seharusnya sangat jarang. Dalam kebanyakan kasus, Anda akan memberikan nama kolom sebagai argumen pertama, dan di SQL Server, kolom memiliki tipe data yang ditentukan. Dalam kasus seperti itu, nilai null akan benar-benar diterima, karena SQL Server mengetahui tipe data kolom.
Hal yang sama dapat dikatakan untuk variabel. Jika Anda meneruskan sebuah variabel, Anda harus mendeklarasikan tipenya, dan karena itu, Anda tidak akan mendapatkan kesalahan.
Bagaimanapun, jika Anda mendapatkan kesalahan ini, Anda dapat mencoba solusi berikut.
Solusi
Jika Anda mendapatkan kesalahan ini, Anda dapat mengonversi konstanta nol ke tipe data tertentu:
SELECT NULLIF(CAST(null AS int), 7);
Hasil:
NULL
Dalam hal ini NULL
dikembalikan, karena dua argumen berbeda dan NULL
adalah argumen pertama.
Jika argumen pertama adalah kolom, Anda tidak perlu khawatir untuk mengubah tipenya, karena kolom tersebut sudah memiliki tipe data.
Misalkan kita memiliki ProductPrice
kolom:
SELECT ProductPrice
FROM Products;
Hasil:
+----------------+ | ProductPrice | |----------------| | 25.99 | | 14.75 | | 11.99 | | 0.00 | | 0.00 | | NULL | | 9.99 | | 25.99 | +----------------+
Kolom berisi nilai nol.
Namun, kita dapat meneruskan kolom itu ke NULLIF()
tanpa menyebabkan kesalahan 4151:
SELECT NULLIF(ProductPrice, 0) AS Result
FROM Products;
Hasil:
+----------+ | Result | |----------| | 25.99 | | 14.75 | | 11.99 | | NULL | | NULL | | NULL | | 9.99 | | 25.99 | +----------+
Kami tidak mendapatkan kesalahan, karena SQL Server sudah mengetahui tipe data kolom.