Использование COALESCE для строк не возвращается - PullRequest
6 голосов
/ 25 августа 2011

Я использовал COALESCE много раз, но, полагаю, я никогда не сталкивался с этой конкретной ситуацией.Предположим, что на @ param1 имеется только одна строка.

select @test = COALESCE (column1, 'default') FROM Table1 WHERE column3 = @param1

В этом сценарии, если значение column1 равно нулю, значение «default» выбирается, когда инструкция sql фактически возвращает строку.Что делать, если для @ param1 нет соответствующих записей.

Допустим, я хочу всегда иметь значение по умолчанию для @test.Правильно ли следующее или есть другой способ?

select @test = COALESCE( (select column1 FROM Table1 WHERE column3 = @param1), 'default').

Я предположил, что select @test = COALESCE (column1, 'default') FROM Table1 WHERE column3 = @param1 будет содержать значение по умолчанию, даже если оно не вернуло строку.Нет.

Полагаю, я могу также проверить, равен ли @test NULL и назначить значение по умолчанию.

Ответы [ 2 ]

10 голосов
/ 25 августа 2011

Вы уже эффективно упомянули ответ ... Используйте COALESCE после / вне SELECT, так как в противном случае вы фактически никогда не назначите значение (которое отличается от назначения значения NULL) ...

SELECT @test = NULL
SELECT @test = column1 FROM Table1 WHERE column3 = @param1
SELECT @test = COALESCE(@test, 'default')

Или просто ...

SELECT @test = COALESCE((SELECT column1 FROM Table1 WHERE column3 = @param1), 'default')
1 голос
/ 26 августа 2011

Вы также можете просто присвоить переменной значение по умолчанию при объявлении.Если по запросу не возвращаются строки, присваивание не производится.

DECLARE @test VARCHAR(10) = 'default'

SELECT  @test = COALESCE(column1, @test) /*Might not need COALESCE 
                                           if column1 is not nullable*/
FROM    Table1
WHERE   column3 = @param1 

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