首页 > 解决方案 > SQL注入if语句不接受else

问题描述

运行以下语句,SQL Server 2014 中的 if 语句出现错误:

if MAX(A,OS) <> 0 

MAX(A.OS) + 
SUM(CASE WHEN TipoMovimento = 'E' THEN Quantidade  ELSE 0 END) -
SUM(CASE WHEN TipoMovimento ='S' THEN Quantidade else 0  END)
AS ClosingStock 

else
SUM(CASE WHEN TipoMovimento = 'E' THEN Quantidade  ELSE 0 END)
as ClosingStock

标签: sqlsql-servertsqlif-statementselect

解决方案


假设您显示的是 SQL 语句的一部分,我认为您需要一个case 表达式而不是一个if 语句。前者是可以在查询中使用的条件逻辑,而后者是在代码块中发挥作用的流控制结构,例如存储过程等:

CASE WHEN MAX(A.OS) <> 0 
    THEN MAX(A.OS)
            + SUM(CASE WHEN TipoMovimento = 'E' THEN Quantidade  ELSE 0 END) 
            - SUM(CASE WHEN TipoMovimento ='S' THEN Quantidade else 0  END)
    ELSE SUM(CASE WHEN TipoMovimento = 'E' THEN Quantidade  ELSE 0 END)
END as ClosingStock

在 SQL Server 中,您可以使用 ; 来表达相同的逻辑IIF()。我更喜欢CASE,因为它是标准 SQL。

请注意,列别名仅在表达式末尾声明一次。

另外,大概MAX(A,OS)MAX(A.OS).


推荐阅读