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

Oprava „Alespoň jeden z argumentů COALESCE musí být výraz, který není konstantou NULL“ v SQL Server

Pokud se na serveru SQL Server zobrazuje chybová zpráva 4127, která zní:„Alespoň jeden z argumentů COALESCE musí být výraz, který není konstantou NULL“, je to pravděpodobně proto, že všechny vaše argumenty pro COALESCE() výrazy jsou NULL konstantní.

Chcete-li tento problém vyřešit, ujistěte se, že alespoň jeden argument není NULL konstantní.

Příklad chyby

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

SELECT COALESCE( null, null );

Dostáváme toto:

Msg 4127, Level 16, State 1, Line 1
At least one of the arguments to COALESCE must be an expression that is not the NULL constant.

V tomto případě byly všechny argumenty NULL konstantní, a tak byla vrácena chyba.

Řešení

Řešení je snadné. Vše, co musíme udělat, je ujistit se, že alespoň jeden argument není NULL konstantní:

SELECT COALESCE(null, 'Cat', 'Dog');

Výsledek:

Cat

V tomto případě Cat byl první non-NULL argument, a tak COALESCE() vrátil tuto hodnotu.

Jak je vidět zde, je v pořádku zahrnout NULL konstantní jako argument, pokud existuje také alespoň jeden další argument, který není NULL konstantní.

NULL Výrazy a databázové sloupce

Všimněte si, že NULL konstantní není totéž jako výraz, jehož výsledkem je NULL . A není to totéž jako sloupec databáze, který obsahuje NULL .

Pokud například všechny argumenty odkazují na sloupce databáze a tyto sloupce databáze jsou NULL , pak nedostaneme chybu.

Předpokládejme, že spustíme následující dotaz:

SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Výsledek:

CustomerId  CustomerCategoryId
----------- ------------------
NULL        NULL

Oba sloupce obsahují NULL hodnoty.

Pokud tedy předáme oba sloupce COALESCE() , dostaneme výsledek NULL :

SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Výsledek:

NULL

Totéž platí, pokud nahradíme jeden ze sloupců hodnotou NULL konstantní:

SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Výsledek:

NULL

Takže jen když vše argumenty jsou NULL konstantní, že dostaneme chybu.


  1. ORACLE a TRIGGERS (vloženo, aktualizováno, odstraněno)

  2. Jak použít ANY místo IN v klauzuli WHERE s Rails?

  3. Šifrování zálohování databáze – doporučené postupy

  4. Jak deklarovat proměnnou v dotazu PostgreSQL