Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fehlernachricht 4151 „Der Typ des ersten Arguments für NULLIF kann nicht die NULL-Konstante sein, da der Typ des ersten Arguments bekannt sein muss“ in SQL Server behoben

Wenn Sie die Fehlermeldung 4151 erhalten:„Der Typ des ersten Arguments für NULLIF kann nicht die NULL-Konstante sein, da der Typ des ersten Arguments bekannt sein muss “ in SQL Server, weil Sie einen Nullwert als erstes Argument an NULLIF() übergeben Funktion.

Um diesen Fehler zu beheben, stellen Sie sicher, dass Sie die Nullkonstante nicht als erstes Argument an die Funktion übergeben. Oder konvertieren Sie ihn in einen bestimmten Datentyp.

Beispiel für den Fehler

Hier ist ein Codebeispiel, das den Fehler erzeugt:

SELECT NULLIF(null, 7);

Ergebnis:

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 das NULLIF() Der Rückgabewert der Funktion verwendet den Datentyp des ersten Ausdrucks. Das bedeutet, dass der erste Wert nicht die Nullkonstante sein darf, da die Nullkonstante keinen bekannten Datentyp hat.

Dieser Fehler sollte ziemlich selten sein. In den meisten Fällen übergeben Sie als erstes Argument einen Spaltennamen, und in SQL Server haben Spalten einen definierten Datentyp. In solchen Fällen wird tatsächlich ein Nullwert akzeptiert, da SQL Server den Datentyp der Spalte kennt.

Dasselbe könnte man für Variablen sagen. Wenn Sie eine Variable übergeben, müssten Sie ihren Typ deklarieren, und daher würden Sie den Fehler nicht erhalten.

Wenn Sie diesen Fehler erhalten, können Sie in jedem Fall die folgende Lösung versuchen.

Lösung

Wenn Sie diesen Fehler erhalten, können Sie die Nullkonstante in einen bestimmten Datentyp konvertieren:

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

Ergebnis:

NULL

In diesem Fall NULL zurückgegeben, da die beiden Argumente unterschiedlich und NULL sind ist das erste Argument.

Wenn das erste Argument eine Spalte ist, müssen Sie sich keine Gedanken über die Konvertierung ihres Typs machen, da die Spalte bereits einen Datentyp hat.

Angenommen, wir haben einen ProductPrice Spalte:

SELECT ProductPrice
FROM Products;

Ergebnis:

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

Die Spalte enthält einen Nullwert.

Wir können diese Spalte jedoch an NULLIF() übergeben ohne einen verursachenden Fehler 4151:

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

Ergebnis:

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

Wir haben keinen Fehler erhalten, da SQL Server den Datentyp der Spalte bereits kennt.