2009-12-14 68 views
1

我正在創建一個存儲過程,用於從表中選擇一個值並在另一個過程中使用它。如果搜索到的第一個值不存在,我需要它使用默認值。我是新來的存儲過程,所以我不確定最佳實踐。爲存儲的proc select語句設置默認值

這是第一個可能或不可能返回值的select語句。如果它沒有返回值,我需要將「@theValue」設置爲10,以便它可以在下一個select語句中使用。

DECLARE @TheValue nvarchar(50) 

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

什麼是最好的解決方案?

+0

它適用於哪個SQL服務器?甲骨文? MySQL的?女士? Informix的? DB2? – wallyk 2009-12-14 17:05:43

+0

MS SQL 2008服務器 – Retrocoder 2009-12-14 17:13:56

回答

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) 
+0

您擊敗了我! – rfonn 2009-12-14 17:07:37

0

@TheValue如果select沒有命中任何行,它將爲NULL。而NULL是一個很好的值來表示「找不到」。如果爲空

一個技巧是,你必須與is null而不是= null以檢查它們,例如:

where @TheValue is NULL 
0

​​3210返回列表中的第一個非空值,也是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) 
1

另一種可能性,設置查詢之前的默認值

DECLARE @TheValue爲nvarchar(50)

SET @TheValue = '某些默認值'

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

這將始終返回默認值或正確的值。

希望這會有所幫助。