В SQL Server, ако получавате съобщение за грешка Msg 4127, което гласи „Поне един от аргументите за COALESCE трябва да е израз, който не е константа NULL“, това вероятно е защото всичките ви аргументи към COALESCE() израз са NULL константа.
За да коригирате този проблем, уверете се, че поне един аргумент не е NULL константа.
Пример за грешка
Ето пример за код, който произвежда тази грешка:
SELECT COALESCE( null, null ); Получаваме това:
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.
В този случай всички аргументи бяха NULL константа и така беше върната грешка.
Решение
Решението е лесно. Всичко, което трябва да направим, е да се уверим, че поне един аргумент не е NULL константа:
SELECT COALESCE(null, 'Cat', 'Dog'); Резултат:
Cat
В този случай Cat беше първият не-NULL аргумент и така COALESCE() върна тази стойност.
Както се вижда тук, е добре да включите NULL константа като аргумент, стига да има поне още един аргумент, който не NULL константа.
NULL Изрази и колони в базата данни
Имайте предвид, че NULL константата не е същата като израз, който води до NULL . И това не е същото като колона на база данни, която съдържа NULL .
Например, ако всички аргументи се позовават на колоните на базата данни и тези колони на базата данни са NULL , тогава не получаваме грешката.
Да предположим, че изпълняваме следната заявка:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Резултат:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
И двете колони съдържат NULL стойности.
Така че, ако предадем и двете колони на COALESCE() , получаваме резултат от NULL :
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Резултат:
NULL
Същото е вярно, ако заменим една от колоните с NULL константа:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Резултат:
NULL
Така че това е само когато всички аргументите са NULL константа, че получаваме грешка.