基于声明变量实现SQL Server条件WHERE子句是否可行?
修正你的SQL CASE表达式问题
嘿,我瞅了瞅你这段SQL代码,发现几个影响运行的问题,咱们来一步步修正:
- CASE语法不完整:SQL里的CASE表达式必须用
END来闭合,你这段代码里没写,数据库肯定会报错 - 变量名不一致:开头定义的是
@ITEST,但第二个判断里写成了@TEST,变量名得统一起来 - CASE结构错误:不需要重复写
CASE WHEN,正确的结构是一个CASE开头,后面跟着多个WHEN...THEN分支,最后用END收尾
下面是修正后的完整代码:
DECLARE @ITEST INT = 1 SELECT NAME, LNAME, CADDRESS FROM JEEVEN WHERE CASE WHEN @ITEST = 1 THEN (CASE WHEN (EVEN_KEY > 5 AND EVEN_KEY < 10) THEN 1 ELSE 0 END) WHEN @ITEST = 2 THEN (CASE WHEN (EVEN_KEY > 20 AND EVEN_KEY < 30) THEN 1 ELSE 0 END) ELSE 1 -- 这里可以根据需求调整默认逻辑,比如返回0就是不匹配任何条件时不返回记录 END = 1
或者更简洁的写法,不用嵌套CASE,直接把条件整合到WHERE里:
DECLARE @ITEST INT = 1 SELECT NAME, LNAME, CADDRESS FROM JEEVEN WHERE (@ITEST = 1 AND EVEN_KEY > 5 AND EVEN_KEY < 10) OR (@ITEST = 2 AND EVEN_KEY > 20 AND EVEN_KEY < 30)
这种写法可读性更强,数据库优化器也更容易做索引优化哦~
内容的提问来源于stack exchange,提问作者FrenkyB
相关产品推荐
相关产品推荐

