2009-07-31 43 views
3

嗨,我在SQL新手,需要幫助 我有一個包含一個更新查詢像一個參數化存儲過程...保留在數據庫原值時,NULL值傳遞給存儲過程

UPDATE sometable 
SET 
    price1 = @param1, 
    price2 = @param2, 
    price3 = @param3, 
    price4 = @param4, 
WHERE 
    ID = @param5 

現在當我通過將任何參數值設置爲NULL來執行此SP時,它會在DB中更新,我想知道的是如果其中一個參數值爲NULL,那麼我們是否可以在DB中保留該列原始值,而不是使用NULL更新它。

回答

7

在SQLServer中的整潔的方法是使用ISNULL(@param1, price1)

這需要@param1並檢查它是否爲NULL。如果它是NULL,則用來自price1的值替換。我喜歡ISNULL,因爲它的可讀性非常好,它在錫紙上說的是什麼。

儘管這不是ANSI SQL,但存在一個更靈活的命令:COALESCE。它就像ISNULL,但可以使用任意數量的參數。它將搜索它們以獲取第一個非NULL值。如果沒有找到,返回NULL ...


UPDATE sometable 
SET 
     price1 =  ISNULL(@param1, price1), 
     price2 =  ISNULL(@param2, price2), 
     price3 =  ISNULL(@param3, price3), 
     price4 =  ISNULL(@param4, price4) 
WHERE 
     ID = @param5 


UPDATE sometable 
SET 
     price1 =  COALESCE(@param1, price1), 
     price2 =  COALESCE(@param2, price2), 
     price3 =  COALESCE(@param3, price3), 
     price4 =  COALESCE(@param4, price4) 
WHERE 
     ID = @param5 


另見: 「COALESCE vs ISNULL

2

嘗試用一個CASE語句包裹@paramx:

CASE @paramx WHEN NULL,則pricex ELSE @paramx END

相關問題