【问题标题】:SQL inject if statement not accept elseSQL注入if语句不接受else
【发布时间】:2020-08-03 04:42:16
【问题描述】:

运行以下语句,我在 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

【问题讨论】:

    标签: sql sql-server tsql if-statement select


    【解决方案1】:

    假设您显示的是 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)

    【讨论】:

    • 你确定MAX(A,OS)
    • @Sami:谢谢,没有发现。这在查询中使用了两次,第二次出现是MAX(A.OS),所以我假设一个错字。将其添加到我的答案中。
    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 2019-04-09
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2019-09-17
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多