为存储的proc select语句设置默认值

时间:2009-12-14 17:03:55

标签: sql sql-server stored-procedures

我正在创建一个存储过程,它从表中选择一个值并在另一个过程中使用它。如果搜索的第一个值不存在,我需要它使用默认值。我是存储过程的新手,所以我不确定最佳实践。

这是第一个可能会或可能不会返回值的select语句。如果它没有返回值,我需要将“@theValue”设置为10,以便它可以在下一个select语句中使用。

DECLARE @TheValue nvarchar(50)

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

什么是最好的解决方案?

4 个答案:

答案 0 :(得分:4)

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 :(得分:1)

另一种可能性,在查询之前设置默认值

DECLARE @TheValue nvarchar(50)

SET @TheValue ='某些默认值'

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

这将始终返回默认值或正确值。

希望这有帮助。

答案 2 :(得分:0)

如果select没有命中任何行,

@TheValue将为NULL。并且NULL是一个很好的值,表示“未找到”。

使用NULL的一个技巧是,您必须使用is null而不是= null来检查它们,例如:

where @TheValue is NULL

答案 3 :(得分:0)

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)