2017-10-18 57 views
1

我有以下查詢:如果,否則,如果,否則不能正常工作只有與別的事情

Declare @qty int 
SET @qty = (SELECT Qty FROM StockTB WHERE ProductID='6' AND Qty=0) 
if(@qty =0) 
Update StockTB SET Qty=Qty+5, BatchNo='1234', ExpDate='03/11/2018' WHERE 
ProductID='6' AND Qty=0 
Else 
INSERT INTO StockTB Values('6', '5', '1234', '03/11/2018') 

上述查詢工作正常。但是當我在查詢中添加ELSE IF時,它會失敗。這裏是ELSE IF的實現。

Declare @expdate date 
SET @expdate =(SELECT ExpDate FROM StockTB WHERE ProductID='6' AND 
ExpDate='03/11/2018') 
Declare @qty int 
SET @qty = (SELECT Qty FROM StockTB WHERE ProductID='6' AND Qty=0) 
if(@qty =0) 
Update StockTB SET Qty=Qty+5, BatchNo='1234', ExpDate='03/11/2018' WHERE 
ProductID='6' AND Qty=0 
Else if(@expdate='03/11/2018') 
Update StockTB SET Qty=Qty+5 WHERE ProductID='6' AND ExpDate='03/11/2018' 
Else 
INSERT INTO StockTB Values('6', '5', '1234', '03/11/2018') 
+2

'SET @qty =(SELECT數量從StockTB WHERE的ProductID = '6',數量= 0)' - 當你期望這是非零? –

+1

@Damien_The_Unbeliever有一種情況:如果查詢沒有返回結果('NULL')。 – MatSnow

+2

@MatSnow - 同意 - 這將是一個非常奇怪的寫作方式,看起來只需要一個'MERGE'。 –

回答

2

我無法讀取您的模式,但似乎「ExpDate」是一個日期。 你在比較它varchar'03/11/2018'

我不知道你的意思是11月3日或3月11日。兩個SQL都不知道。 嘗試CONVERT(VARCHAR, ExpDate, 103)代替:

在: Else if(@expdate='03/11/2018')

將其更改爲: Else if(CONVERT(VARCHAR, @expdate, 103) = '03/11/2018')

也可以實現使用上查詢設置@expdate值相同的結果(並使其VARCHAR ,不是日期)

* Ps:幻數103作爲參數意味着dd/mm/yyyy。您可以獲得完整列表here

+4

或使用ANSI標準YYYYMMDD。 –

0

請試試這個

Declare @expdate date 
SET @expdate =(SELECT ExpDate FROM StockTB WHERE ProductID='6' AND 
ExpDate='2018/11/03') 
Declare @qty int 
SET @qty = (SELECT Qty FROM StockTB WHERE ProductID='6' AND Qty=0) 
if(@qty =0) 
Update StockTB SET Qty=Qty+5, BatchNo='1234', ExpDate='2018/11/03' WHERE 
ProductID='6' AND Qty=0 
Else 
if(@expdate='2018/11/03') 
Update StockTB SET Qty=Qty+5 WHERE ProductID='6' AND ExpDate='2018/11/03' 
Else 
INSERT INTO StockTB Values('6', '5', '1234', '2018/11/03') 
+2

這與OP發佈的內容沒有任何區別。 –