【问题标题】:If, Else if, Else not working Only if and Else WorkingIf, Else if, Else not working 只有 if and Else Working
【发布时间】:2017-10-18 12:41:33
【问题描述】:

我有以下疑问:

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')

【问题讨论】:

  • SET @qty = (SELECT Qty FROM StockTB WHERE ProductID='6' AND Qty=0) - 你预计什么时候非零?
  • @Damien_The_Unbeliever 有一种情况:如果查询没有返回结果 (NULL)。
  • @MatSnow - 同意 - 这将是一种非常奇怪的写法,看起来只需要一个 MERGE
  • “无法工作”到底是什么意思?你期望什么,你会得到什么?
  • 您应该阅读有关 MERGE 的信息。 docs.microsoft.com/en-us/sql/t-sql/statements/…处理这种事情要容易得多。

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


【解决方案1】:

我无法阅读您的架构,但“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

【讨论】:

  • 或者使用ANSI标准YYYYMMDD。
【解决方案2】:

请试试这个

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')

【讨论】:

  • 这与 OP 发布的内容没有什么不同。