2014-08-27 69 views
0

你好,我有以下存儲過程:嵌套如果條件在T-SQL

CREATE PROCEDURE update_stock_level 
(
    @ItemID int, 
    @Quantity int = 1, 
    @Return int = 0 
) 
AS 

    IF @Return = 0 
     UPDATE Stock 
     SET  Quantity = (Quantity - @Quantity) 
     WHERE ItemID  = @ItemID 

    ELSE 
     UPDATE Stock 
     SET  Quantity = (Quantity + @Quantity) 
     WHERE ItemID  = @ItemID 

此存儲過程是POS應用,這個程序做什麼(應該做的)是更新(增加或減少)基於物品ID和物品數量的庫存水平。

ItemID - >從前端選擇的項目ID。 數量 - >多少項 返回 - >如果返回值爲'0',這意味着它是錯誤的,這意味着這不是一個返回銷售,如果它是'1',這意味着一個項目正在返回,在這種情況下,股票應該增加按數量返還。如果沒有任何內容傳遞給qantity參數,那麼默認值爲1.

我現在的問題是股票水平得到降低的罰款,但是在作出回報時它不會增加。

+1

如果@quantity = 0 .. set Quantity = Quantity - @Quantity? – Stoleg 2014-08-27 10:04:09

+0

哦,謝謝你,我不知道這是不是我必須做點什麼。 :) – 2014-08-27 10:06:19

+1

正如@Stoleg所說,如果數量= 0,您的第一個條件將不起作用。如果數量= 0或者其他情況,你就完全一樣! – Logar 2014-08-27 10:09:13

回答

3

離開只是ELSE部分:

IF @Return = 0 
    UPDATE Stock 
    SET  Quantity = (Quantity - @Quantity) 
    WHERE ItemID  = @ItemID 
ELSE 
    UPDATE Stock 
    SET  Quantity = (Quantity + @Quantity) 
    WHERE ItemID  = @ItemID 

或者,你可以在一個單一的statemnet做到這一點:

UPDATE Stock 
SET  Quantity = Quantity - @Quantity * POWER(-1,@Return) 
WHERE ItemID  = @ItemID 

@如果返回= 0,則功率(1,0)= 1和你減少庫存。

如果@ Return = 1,那麼power(-1,1)= -1,並增加庫存。

+0

更新了我的代碼,但是庫存水平只會下降,但在返回時不會增加。 – 2014-08-27 10:24:07

+0

@Reeturn的值是否減少? – Stoleg 2014-08-27 10:26:42

+0

謝謝你的實際工作,它不更新的原因是因爲我不得不在前端改變一些東西。 – 2014-08-27 11:08:10