Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Поправете „Поне един от аргументите за COALESCE трябва да бъде израз, който не е константа NULL“ в SQL Server

В 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 константа, че получаваме грешка.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаването на рамков модел на Entity обхваща множество бази данни

  2. Идентификаторът от няколко части не можа да бъде обвързан

  3. Преименувайте първичен ключ в SQL Server (T-SQL)

  4. Топ 9 съвета за настройка на вашия SQL сървърен клъстер

  5. Познайте връзките между всички таблици на базата данни в SQL Server