如果,如果,否则不工作只有和其他工作

时间:2017-10-18 12:41:34

标签: sql sql-server database sql-server-2008

我有以下查询:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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')