sql >> Database >  >> RDS >> Sqlserver

Fix Error Msg 4151 "Het type van het eerste argument voor NULLIF kan niet de NULL-constante zijn omdat het type van het eerste argument bekend moet zijn" in SQL Server

Als u de foutmelding Msg 4151 "Het type van het eerste argument voor NULLIF krijgt, kan niet de NULL-constante zijn, omdat het type van het eerste argument bekend moet zijn ” in SQL Server, komt dit omdat u een null-waarde als eerste argument doorgeeft aan de NULLIF() functie.

Om deze fout op te lossen, moet u ervoor zorgen dat u de null-constante niet als het eerste argument aan de functie doorgeeft. Of als je dat doet, converteer het dan naar een specifiek gegevenstype.

Voorbeeld van de fout

Hier is een voorbeeld van code die de fout veroorzaakt:

SELECT NULLIF(null, 7);

Resultaat:

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.

In SQL Server, de NULLIF() de retourwaarde van de functie gebruikt het gegevenstype van de eerste expressie. Dit betekent dat de eerste waarde niet de nulconstante mag zijn, aangezien de nulconstante geen bekend gegevenstype heeft.

Deze fout zou vrij zeldzaam moeten zijn. In de meeste gevallen geeft u een kolomnaam door als eerste argument en in SQL Server hebben kolommen een gedefinieerd gegevenstype. In dergelijke gevallen wordt een null-waarde daadwerkelijk geaccepteerd, omdat SQL Server het gegevenstype van de kolom kent.

Hetzelfde kan gezegd worden voor variabelen. Als je een variabele doorgeeft, zou je het type moeten declareren en daarom zou je de fout niet krijgen.

In ieder geval, als je deze foutmelding krijgt, kun je de volgende oplossing proberen.

Oplossing

Als u deze foutmelding krijgt, kunt u de nulconstante converteren naar een specifiek gegevenstype:

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

Resultaat:

NULL

In dit geval NULL wordt geretourneerd, omdat de twee argumenten verschillend zijn en NULL is het eerste argument.

Als het eerste argument een kolom is, hoeft u zich geen zorgen te maken over het converteren van het type, omdat de kolom al een gegevenstype heeft.

Stel we hebben een ProductPrice kolom:

SELECT ProductPrice
FROM Products;

Resultaat:

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

De kolom bevat een null-waarde.

We kunnen die kolom echter doorgeven aan NULLIF() zonder een veroorzakende fout 4151:

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

Resultaat:

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

We hebben geen foutmelding gekregen, omdat SQL Server het gegevenstype van de kolom al kent.


  1. Hoe de gematerialiseerde weergave in Oracle te vernieuwen

  2. INSERT met SELECT

  3. SQL Server 2016:gegevens invoegen

  4. mysql draai-/kruistabelquery