Заставить COALESE (NULL, NULL) вернуть NULL - PullRequest
1 голос
/ 23 марта 2020

In SQL SERVER Учитывая тот факт, что: Col1 и Col2 содержат значения чисел c и NULL

SELECT 
COALESCE(Col1,Col2) 

Возвращает ошибку: «По крайней мере, один из аргументов COALESCE должен быть выражением это не константа NULL. " Учитывая, что Col1 и Col2 имеют значение NULL, я хочу заставить его возвращать значение NULL в этом случае.

Обходной путь кажется мне нелегким / неэффективным:

SELECT
NULLIF(COALESCE(Col1 ,Col2 ,''),'') 

Обратите внимание, что Col1 и Col2 являются полями для чисел c и не могут принимать '' в качестве значения.

Любое другое предложение?

Спасибо за вашу помощь

1 Ответ

3 голосов
/ 23 марта 2020

Этот код работает:

SELECT COALESCE(Col1, Col2) 
FROM . . .   -- references here that define COL1 and COL2

Если оба столбца равны NULL, он вернет NULL (в вашем случае - целое число).

Единственный раз, когда вы вы получаете ошибку, о которой вы упоминаете, когда столбцы явно NULL. Даже вычисления, кажется, обходят это:

select coalesce(null + 3, null)
--> NULL rather than an error

Следующее даже возвращает NULL, а не ошибку:

declare @col1 int;
declare @col2 int;

select coalesce(@col1, @col2);

Здесь - это дБ <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...