sql - 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
解决方案
假设您显示的是 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)
.
推荐阅读
- typescript - 如何使用 TS 最好地处理 getStaticProps 场景?
- spring-data - @LocatorApplication 启动然后立即停止
- angular - Angular 2/Property Binding - 为什么从组件更改属性不能正确更新模板?
- powershell - Powershell 用 $var 值替换字符串中的 $var
- python - 给定集合的不同总和计数器
- python - 为什么循环不迭代每一行?
- javascript - 外部 JavaScript 函数未定义
- javascript - 为什么无法在 Javascript 中删除浏览器缓存?
- windows - 在我们公司实施新的严格网络安全措施后,我们的 GITBLIT/Jetty 服务已停止工作
- bash - Bash/Shell:如何在不删除被调用者历史记录功能的情况下添加到历史记录