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.