Установка значения по умолчанию для хранимой инструкции выбора процесса - PullRequest
1 голос
/ 14 декабря 2009

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

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

DECLARE @TheValue nvarchar(50)

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

Какое будет лучшее решение?

Ответы [ 4 ]

4 голосов
/ 14 декабря 2009
DECLARE @TheValue nvarchar(50)

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

-- Assuming @TheValue is an output parameter
SELECT @TheValue = ISNULL(@TheValue, 10)
1 голос
/ 14 декабря 2009

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

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

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

SELECT @TheValue = deviceManager.SystemSettings.Value FROM deviceManager.SystemSettings WHERE deviceManager.SystemSettings.Setting = 'expire-терминал-запросы'

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

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

0 голосов
/ 14 декабря 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)
0 голосов
/ 14 декабря 2009

@TheValue будет НЕДЕЙСТВИТЕЛЕН, если выбор не достигнет каких-либо строк. И NULL является хорошим значением для обозначения «не найдено».

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

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