sql >> Database teknologi >  >> RDS >> Sqlserver

Fix Error Msg 4151 "Typen af ​​det første argument til NULLIF kan ikke være NULL konstanten, fordi typen af ​​det første argument skal være kendt" i SQL Server

Hvis du får fejlmeddelelse 4151 "Typen af ​​det første argument til NULLIF kan ikke være NULL-konstanten, fordi typen af ​​det første argument skal være kendt ” i SQL Server, er det fordi du sender en null-værdi som det første argument til NULLIF() funktion.

For at rette denne fejl skal du sørge for, at du ikke sender null-konstanten som det første argument til funktionen. Eller hvis du gør det, så konverter det til en bestemt datatype.

Eksempel på fejlen

Her er et eksempel på kode, der producerer fejlen:

SELECT NULLIF(null, 7);

Resultat:

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.

I SQL Server er NULLIF() funktions returværdi bruger datatypen for det første udtryk. Det betyder, at den første værdi ikke må være nulkonstanten, da nulkonstanten ikke har nogen kendt datatype.

Denne fejl burde være ret sjælden. I de fleste tilfælde sender du et kolonnenavn som det første argument, og i SQL Server har kolonner en defineret datatype. I sådanne tilfælde vil en null-værdi faktisk blive accepteret, på grund af det faktum, at SQL Server kender kolonnens datatype.

Det samme kan siges om variabler. Hvis du sender en variabel, ville du have skullet erklære dens type, og du ville derfor ikke få fejlen.

Under alle omstændigheder, hvis du får denne fejl, kan du prøve følgende løsning.

Løsning

Hvis du får denne fejl, kan du konvertere null-konstanten til en bestemt datatype:

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

Resultat:

NULL

I dette tilfælde NULL returneres, fordi de to argumenter er forskellige og NULL er det første argument.

Hvis det første argument er en kolonne, behøver du ikke bekymre dig om at konvertere dens type, fordi kolonnen allerede har en datatype.

Antag, at vi har en ProductPrice kolonne:

SELECT ProductPrice
FROM Products;

Resultat:

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

Kolonnen indeholder en nulværdi.

Vi kan dog videregive den kolonne til NULLIF() uden at forårsage fejl 4151:

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

Resultat:

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

Vi fik ikke en fejl, fordi SQL Server allerede kender kolonnens datatype.


  1. Simpel parametrering og trivielle planer — del 3

  2. MariaDB FIELD() vs FIND_IN_SET():Hvad er forskellen?

  3. Sådan håndteres Play Framework 2-databaseudviklinger i produktionen

  4. Importer Excel-regnearkskolonner til SQL Server-databasen