加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – WHERE子句中的可选参数

发布时间:2020-12-12 16:21:14 所属栏目:MsSql教程 来源:网络整理
导读:假设有一个存储过程有3个参数.在所有可能性中,我正在寻求使用单个WHERE子句来实现此目的,而不用使用()AND()OR()太多… 例: //Params@CITY VARCHAR(100) = NULL,@GENDER VARCHAR(100) = NULL,@AGE VARCHAR(100) = NULL 我想你可以使用IF BEGIN … END为每个变
假设有一个存储过程有3个参数.在所有可能性中,我正在寻求使用单个WHERE子句来实现此目的,而不用使用()AND()OR()太多…

例:

//Params
@CITY VARCHAR(100) = NULL,@GENDER VARCHAR(100) = NULL,@AGE VARCHAR(100) = NULL

我想你可以使用IF BEGIN … END为每个变量,如果存在,但这使代码比想要的时间要长.

以下方法将无法正常工作,因为它的方式太长(这里有大约10个不同的字段,但是例子只有3个),而且我不确定它是否甚至直接提取了独特的值…

SELECT NAME FROM TABLE 
WHERE (
(CITY=@CITY AND GENDER=@GENDER AND AGE=@AGE)
OR (CITY=@CITY AND GENDER=@GENDER)
OR (GENDER=@GENDER AND AGE=@AGE)
OR (CITY=@CITY AND AGE=@AGE)
OR (CITY=@CITY)
OR (GENDER=@GENDER)
OR (AGE=@AGE)
)

是否有更短的更有效的方法呢?

如果是,该方法最好与JOIN兼容.

解决方法

除了ISNULL / COALESCE选项,您还可以将参数测试为null:
SELECT NAME  
FROM TABLE  
WHERE  
    (@City IS NULL OR City = @City)
AND 
    (@Gender IS NULL OR Gender = @Gender)
AND 
    (@Age IS NULL OR Age = @Age)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读