Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql If,Else If,Else不起作用仅当和Else起作用_Sql_Sql Server_Database_Sql Server 2008 - Fatal编程技术网

Sql If,Else If,Else不起作用仅当和Else起作用

Sql If,Else If,Else不起作用仅当和Else起作用,sql,sql-server,database,sql-server-2008,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'

我有以下疑问:

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')
上面的查询工作正常。但是当我在查询中添加elseif时,它失败了。这里是在有了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')

我无法读取您的模式,但ExpDate似乎是一个日期。 您正在将其与varchar'03/11/2018'进行比较

我不知道你是指11月3日还是3月11日。两人都不知道。 请尝试转换varchar,ExpDate,103:

地址: 其他的if@expdate='03/11/2018'

将其更改为: Else ifCONVERTVARCHAR,@expdate,103='2018年11月3日'

您还可以使用查询中的结果来设置@expdate值并使其变为VARCHAR,而不是date,从而获得相同的结果

*Ps:魔术数字103作为参数意味着dd/mm/yyyy。您可以获得完整的列表。

请试试这个

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

设置@qty=SELECT quaty FROM StockTB WHERE ProductID='6',qty=0-你认为什么时候会是非零?@Damien_不信者有一种情况:如果查询没有返回空结果。@MatSnow-同意-这将是一种非常奇怪的书写方式,似乎只需要一次合并。你到底是什么意思?您期望得到什么?您应该阅读有关合并的内容。处理这类事情要简单得多。或者使用ANSI标准YYYYMMDD。这与OP发布的内容没有什么不同。