Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Napraw komunikat o błędzie 4151 „Typ pierwszego argumentu do wartości NULLIF nie może być stałą NULL, ponieważ typ pierwszego argumentu musi być znany” w programie SQL Server

Jeśli pojawi się błąd Msg 4151 „Typ pierwszego argumentu funkcji NULLIF nie może być stałą NULL, ponieważ typ pierwszego argumentu musi być znany ” w SQL Server, dzieje się tak, ponieważ przekazujesz wartość null jako pierwszy argument do NULLIF() funkcja.

Aby naprawić ten błąd, upewnij się, że nie przekazujesz stałej null jako pierwszego argumentu funkcji. A jeśli tak, przekonwertuj go na określony typ danych.

Przykład błędu

Oto przykład kodu, który generuje błąd:

SELECT NULLIF(null, 7);

Wynik:

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.

W SQL Server NULLIF() wartość zwracana przez funkcję wykorzystuje typ danych pierwszego wyrażenia. Oznacza to, że pierwsza wartość nie może być stałą pustą, ponieważ stała pusta nie ma znanego typu danych.

Ten błąd powinien być dość rzadki. W większości przypadków jako pierwszy argument przekażesz nazwę kolumny, a w SQL Server kolumny mają zdefiniowany typ danych. W takich przypadkach wartość null będzie faktycznie akceptowana, ponieważ SQL Server zna typ danych kolumny.

To samo można powiedzieć o zmiennych. Jeśli przekażesz zmienną, będziesz musiał zadeklarować jej typ, a zatem nie otrzymasz błędu.

W każdym razie, jeśli pojawi się ten błąd, możesz wypróbować następujące rozwiązanie.

Rozwiązanie

Jeśli pojawi się ten błąd, możesz przekonwertować stałą pustą na określony typ danych:

SELECT NULLIF(CAST(null AS int), 7);

Wynik:

NULL

W tym przypadku NULL jest zwracany, ponieważ oba argumenty są różne i NULL jest pierwszym argumentem.

Jeśli pierwszym argumentem jest kolumna, nie musisz się martwić o konwersję jej typu, ponieważ kolumna ma już typ danych.

Załóżmy, że mamy ProductPrice kolumna:

SELECT ProductPrice
FROM Products;

Wynik:

+----------------+
| ProductPrice   |
|----------------|
| 25.99          |
| 14.75          |
| 11.99          |
| 0.00           |
| 0.00           |
| NULL           |
| 9.99           |
| 25.99          |
+----------------+

Kolumna zawiera wartość null.

Możemy jednak przekazać tę kolumnę do NULLIF() bez powodu błędu 4151:

SELECT NULLIF(ProductPrice, 0) AS Result
FROM Products;

Wynik:

+----------+
| Result   |
|----------|
| 25.99    |
| 14.75    |
| 11.99    |
| NULL     |
| NULL     |
| NULL     |
| 9.99     |
| 25.99    |
+----------+

Nie otrzymaliśmy błędu, ponieważ SQL Server zna już typ danych kolumny.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Szybka i najlepsza sztuczka do odzyskiwania plików MDF SQL Server

  2. Jak porównać 2 wiersze z tej samej tabeli (SQL Server)?

  3. Jak naprawić „Nieprawidłowa nazwa obiektu „OPENJSON”. w SQL Server

  4. Jak ZMIENIAĆ parametr wartości tabeli?

  5. Wykonywanie zestawu zapytań SQL przy użyciu pliku wsadowego?