Установка значения по умолчанию для сохраненного оператора выбора процедуры

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

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

DECLARE @TheValue nvarchar(50)

SELECT @TheValue = deviceManager.SystemSettings.Value 
FROM deviceManager.SystemSettings 
WHERE (deviceManager.SystemSettings.Setting = 'expire-terminal-requests'

Что было бы лучшим решением?


person Retrocoder    schedule 14.12.2009    source источник
comment
Для какого SQL-сервера он предназначен? Оракул? MySQL? РС? Информикс? ДБ2?   -  person wallyk    schedule 14.12.2009


Ответы (3)


Другая возможность, установить значение по умолчанию перед запросом

ОБЪЯВИТЬ @TheValue nvarchar(50)

SET @TheValue = 'Некоторое значение по умолчанию'

ВЫБЕРИТЕ @TheValue = deviceManager.SystemSettings.Value FROM deviceManager.SystemSettings, ГДЕ deviceManager.SystemSettings.Setting = 'expire-terminal-requests'

Это всегда будет возвращать либо значение по умолчанию, либо правильное значение.

Надеюсь это поможет.

person MGrev    schedule 14.12.2009

@TheValue будет NULL, если при выборе не будет найдено ни одной строки. И NULL — хорошее значение для обозначения «не найдено».

Одна хитрость с NULL заключается в том, что вы должны проверять их с помощью is null вместо = null, например:

where @TheValue is NULL
person Andomar    schedule 14.12.2009

coalesce возвращает первое ненулевое значение из списка, также является стандартом ANSI.

SET @TheValue = coalesce (some_expresson_that_may_return_null
                         ,some_other_expresson_that_may_return_null
                         ,and_another_expresson_that_may_return_null
                         ,default_value)
person Damir Sudarevic    schedule 14.12.2009