SQL SEVER 中查询参数为NULL时,默认查询所有数据的解决方案,存储过程适用

最近在项目中碰到一个比较有意思的问题,网上查找了一些方法,在这里总结分享一下。

 

我们经常会碰到这样的场景:需要查询数据,有一些查询条件,但是查询的时候,我们希望在某个条件为空的时候,则不筛选这个条件,处理的思路主要有这么几种:

1、程序收集查询查询条件的时候处理,这种适合动态SQL的,拼接SQL的时候根据参数是否为空来决定是否拼接对应的查询条件。

2、SQL中处理,这种情况适合存储过程,参数固定的场景,或者是非拼接where条件的场景,存储过程中一般没有使用拼接SQL的方式,那么如何实现参数为null的时候自动查询所有数据呢?本篇文章就是来讨论这个问题。

例如有个表叫做book,记录了一些书籍的信息,表比较简单,接下来的截图中可以看到,假如页面上有个查询条件,按照出版社来查找书籍,我们一般的使用方式是这样的(参数的定义以及赋值模拟页面上的数据收集):

 DECLARE @publishers VARCHAR(50);
SET @publishers='清华大学出版社';
SELECT * FROM dbo.Book WHERE Publishers=@publishers

结果如下:

SQL SERVER中查询参数为空(null)时默认查询所有的实现-LMLPHP

当出版社筛选条件为null,该如何写SQL呢?

 DECLARE @publishers VARCHAR(50);
SELECT * FROM dbo.Book WHERE Publishers=ISNULL(@publishers,Publishers)

查询结果:

SQL SERVER中查询参数为空(null)时默认查询所有的实现-LMLPHP

由此可以实现上述需求,尤其是存储过程的时候可能更适用。

 

转载自:https://www.lmlphp.com/user/57996/article/item/1787416/  ,如有疑问联系博主删除。

posted @   火星人华仔  阅读(688)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示