2017-10-18 30 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发布的内容没有任何区别。 –