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.