在一次任务开发中,我遇到一个小问题如下:
客户在录入一个无规则的条件数据时,
在存储过程中,我们无法再确定变量送入时候是否有数据,
当为@UNKNOW/@UNAGE 为空或NULL的时候不判断该变量的条件时候,我们可以灵活运用一下 WHERE ()中的写法
一般这种用法比较适用于一个存储过程中有多个临时表,数据在不断变化,我们用IF EXISTS可能会把代码写的太长或者比较乱,因此可以考虑使用这种用法
代码中我会使用CASE WHEN 的用法,当CASE WHEN 发现@UNKNOW不为空与NULL的时候就取@UNKNOW作为条件,否则等于原来的字段,不太懂的朋友可以理解为ELSE 1=1。
数据如下
ID | Name | SEX | Age |
1 | Alex | 0 | 18 |
2 | KENNY | 1 | 20 |
3 | Mark | 1 | 22 |
代码
–该变量 @UNKNOW无法确定送入时候是否为空或者是Name中的参数
Create procdure Test
@UNKNOW VARCHAR(20),
@UNAGE INT
AS
SELECT * FROM TABLE1
WHERE (Name=CASE WHEN @UNKNOW <> ''
OR @UNKNOW IS NOT NULL
THEN @UNKNOW ELSE Name END)
AND (Age =CASE WHEN @UNAGE <> ''
OR @UNAGE IS NOT NULL
THEN @UNAGE >= 20 ELSE Age END)
假设@UNKNOW与@UNAGE都为空则查询结果为
ID | Name | SEX | Age |
1 | Alex | 0 | 18 |
2 | KENNY | 1 | 20 |
3 | Mark | 1 | 22 |
假设@UNKNOW = Alex ,@UNAGE都为空则查询结果为
ID | Name | SEX | Age |
1 | Alex | 0 | 18 |
假设@UNKNOW 为空, @UNAGE 为20 则查询结果为