Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbaiki Error Msg 4151 "Tipe argumen pertama ke NULLIF tidak dapat menjadi konstanta NULL karena tipe argumen pertama harus diketahui" di SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Akankah GETUTCDATE() mengembalikan nilai yang sama jika digunakan dua kali dalam pernyataan yang sama?

  2. Berapa ukuran yang Anda gunakan untuk varchar(MAX) dalam deklarasi parameter Anda?

  3. Menghapus Akun Email Database dari Profil (SSMS)

  4. Cara Menggunakan Fitur SQL Server AlwaysOn

  5. TAMPILKAN SEMUA data Tanggal antara dua tanggal; jika tidak ada baris untuk tanggal tertentu maka tampilkan nol di semua kolom