SQL注入if语句不接受else

时间:2020-04-20 15:47:00

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

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

1 个答案:

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