2014-08-27 7 views
0

안녕하세요 다음 저장 프로 시저가 있습니다T-SQL에서 중첩 된 경우에는 조건

,이 절차가 (해야)하는 일 업데이트가이 저장 프로 시저가 POS 응용 프로그램입니다
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 

입니다 (증가 또는 감소)를 재고 수준은 품목 ID 및 품목 수량에 따라 결정됩니다.

항목 ID -> 프런트 엔드에서 선택한 항목의 ID입니다. 수량 -> 얼마나 많은 품목 반환 -> 반환 값이 '0'이면 거짓으로 표시되고, '1'이면 반품되지 않음을 의미합니다. 즉, 상품이 반환되는 경우 재고가 증가해야 함을 의미합니다 반환 된 수량만큼. qantity 매개 변수에 아무 것도 전달되지 않으면 기본값은 1입니다.

이제 내 문제는 재고 수준이 줄었지만 반환 할 때 증가하지 않는다는 것입니다.

+1

@quantity = 0 .. set Quantity = Quantity - @Quantity? – Stoleg

+0

오, 고맙습니다. 내가 뭔가를 했어야 만하기 전에 그런 식으로 아니 었습니다. :) –

+1

@Stoleg이 말했듯이, 수량 = 0 인 경우 첫 번째 조건은 아무런 효과가 없습니다. 그리고 quantity = 0이거나 그렇지 않으면 여러분은 똑같이하고 있습니다! – Logar

답변

3

ELSE 일부를 남겨 :

단일 statemnet에 그것을 할 수 있습니다 또는
IF @Return = 0 
    UPDATE Stock 
    SET  Quantity = (Quantity - @Quantity) 
    WHERE ItemID  = @ItemID 
ELSE 
    UPDATE Stock 
    SET  Quantity = (Quantity + @Quantity) 
    WHERE ItemID  = @ItemID 

:

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

@ 반환 = 0 다음 전원 (-1,0) = 1과의 경우 주식을 줄이십시오.

@ Return = 1 인 경우, (-1,1) = -1로하면 주식이 증가합니다.

+0

내 코드가 업데이트되었지만 재고 수준은 감소하지만 반품시에는 증가하지 않습니다. –

+0

@Return의 모든 값에 대해 감소합니까? – Stoleg

+0

감사합니다. 실제로 작동했는데 프론트 엔드에서 약간의 내용을 변경해야했기 때문에 업데이트하지 않는 이유가있었습니다. –