SQL 中 WHERE () 中灵活运用避开IF EXISTS 和 IN 的用法

xiaoxiao2021-03-01  21

在一次任务开发中,我遇到一个小问题如下:

客户在录入一个无规则的条件数据时, 在存储过程中,我们无法再确定变量送入时候是否有数据, 当为@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 则查询结果为


ID | Name | SEX | Age |

2 | KENNY | 1 | 20 |

3 | Mark | 1 | 22 |

转载请注明原文地址: https://www.6miu.com/read-4050281.html

最新回复(0)