sql >> Databáze >  >> RDS >> Sqlserver

Opravit chybovou zprávu 4151 „Typ prvního argumentu pro NULLIF nemůže být konstanta NULL, protože typ prvního argumentu musí být znám“ v SQL Server

Pokud se zobrazí chybová zpráva 4151 „Typ prvního argumentu pro NULLIF nemůže být konstanta NULL, protože typ prvního argumentu musí být znám ” na serveru SQL Server je to proto, že předáváte hodnotu null jako první argument do NULLIF() funkce.

Chcete-li tuto chybu opravit, ujistěte se, že funkci nepředáváte jako první argument konstantu null. Nebo pokud ano, převeďte jej na konkrétní datový typ.

Příklad chyby

Zde je příklad kódu, který způsobuje chybu:

SELECT NULLIF(null, 7);

Výsledek:

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.

V SQL Server, NULLIF() návratová hodnota funkce používá datový typ prvního výrazu. To znamená, že první hodnota nesmí být konstanta null, protože konstanta null nemá žádný známý datový typ.

Tato chyba by měla být poměrně vzácná. Ve většině případů předáte jako první argument název sloupce a na serveru SQL Server mají sloupce definovaný datový typ. V takových případech bude ve skutečnosti přijata hodnota null, protože SQL Server zná datový typ sloupce.

Totéž lze říci o proměnných. Pokud předáte proměnnou, museli byste deklarovat její typ, a proto byste nedostali chybu.

V každém případě, pokud se vám tato chyba zobrazí, můžete zkusit následující řešení.

Řešení

Pokud se tato chyba zobrazí, můžete konstantu null převést na konkrétní datový typ:

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

Výsledek:

NULL

V tomto případě NULL je vráceno, protože dva argumenty jsou různé a NULL je první argument.

Pokud je prvním argumentem sloupec, nemusíte si dělat starosti s převodem jeho typu, protože sloupec již má datový typ.

Předpokládejme, že máme ProductPrice sloupec:

SELECT ProductPrice
FROM Products;

Výsledek:

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

Sloupec obsahuje hodnotu null.

Tento sloupec však můžeme předat NULLIF() bez příčiny chyby 4151:

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

Výsledek:

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

Nedošlo k chybě, protože SQL Server již zná datový typ sloupce.


  1. PostgreSQL Upsert rozlišuje vložené a aktualizované řádky pomocí systémových sloupců XMIN, XMAX a dalších

  2. Jak zjistit, zda hodnota obsahuje alespoň jednu číselnou číslici v MySQL

  3. Jak získat počet každé odlišné hodnoty ve sloupci?

  4. Získejte seznam podporovaných časových pásem v SQL Server (T-SQL)