`
冷寒冰
  • 浏览: 245328 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

超经典的多条件查询

    博客分类:
  • sql
阅读更多

solution 1 the drawback is performance is slow

 

use testdb;
go
create proc dbo.usp_GetOrders
@OrderID as int=null,
@CustomerID as nchar(5)=null,
@EmployeeID as int=null,
@OrderDate as DateTime=null
with recompile
as
select OrderID,CustomerID,EmployeeID,OrderDate,filler
from dbo.orders
where (OrderID=@OrderID or @OrderID is null)
and (CustomerID=@CustomerID or @CustomerID is null)
and (EmployeeID=@EmployeeID or @EmployeeID is null)
and (OrderDate=@OrderDate or @OrderDate is null)
go

 

 

 

solution 2

--if you want this pro work well always,you must guarantee all column is not null
--when you use the coalesce function please place the input parameter as the first parameter
--drawback in performance too
ALTER PROC dbo.usp_GetOrders
@OrderID AS INT = NULL,
@CustomerID AS NCHAR(5) = NULL,
@EmployeeID AS INT = NULL,
@OrderDate AS DATETIME = NULL
WITH RECOMPILE
AS

SELECT OrderID, CustomerID, EmployeeID, OrderDate, filler
FROM dbo.Orders
WHERE OrderID = COALESCE(@OrderID, OrderID)
AND CustomerID = COALESCE(@CustomerID, CustomerID)
AND EmployeeID = COALESCE(@EmployeeID, EmployeeID)
AND OrderDate = COALESCE(@OrderDate, OrderDate);
GO

 

 

solution 3

--in 'case when' structure,must base on 'is not null' logic to around the limitation of all columns must not be null
--advantage :1 the column can be null 2good performance
alter PROC dbo.usp_GetOrders
@OrderID as int=null,
@CustomerID as nvarchar(5)=null,
@EmployeeID as int=null,
@OrderDate as datetime=null
as
declare @sql as nvarchar(4000);
set @sql=
N'select orderid,customerid,employeeid,orderdate,filler'
+N' from dbo.orders '
+N' where 1=1 '
+case when @OrderID is not null then N' and OrderID=@oid'
else N'' end
+case when @CustomerID is not null then N' and CustomerID=@cid '
else N'' end
+case when @EmployeeID is not null then N' and EmployeeID=@eid'
else N'' end
+case when @orderdate is not null then N' and OrderDate=@dt'
else N'' end;
exec sp_executesql
@sql,
N'@oid as int,@cid as nchar(5),@eid as int,@dt as datetime',
@oid=@OrderID,
@cid=@CustomerID,
@eid=@EmployeeID,
@dt=@OrderDate;
go

1
3
分享到:
评论

相关推荐

    数据挖掘18大算法实现以及其他相关经典DM算法

    HITS算法是另外一个链接算法,部分原理与PageRank算法是比较相似的,HITS算法引入了权威值和中心值的概念,HITS算法是受用户查询条件影响的,他一般用于小规模的数据链接分析,也更容易遭受到攻击。详细介绍链接 K-...

    cqengine:对Java集合的超快速类似SQL的查询

    CQEngine有趣的评论:CQEngine在野外: | | (每天有亿个请求)迭代的局限性从集合中检索符合某些条件的对象的经典方法是迭代集合,并对每个对象进行一些测试。 如果对象符合条件,则将其添加到结果集中。 对集合中...

    超漂亮的网上购物系统 2012 v1.0 正式版

    黑底深蓝、黑底炫彩、黑底深灰、黑底棕色、混合苍青、经典蓝色、朴素蓝色、 明亮蓝色、 精美浅蓝、 韵味深蓝、 品味棕色、 简洁灰色、 明亮银灰、 健康绿色、 植物绿色、 混合黄绿、 混合蓝绿、 可爱泡泡、 可爱洋红...

    帝国网站管理系统 v6.6 简体中文 utf-8.zip

    帝国CMS 6.0版本开发了超容量负载的系统构架,6.5版本则是完善大数据功能,而6.6版本使系统各方面更加完善,新增了更多实用功能、更多细节优化。传承经典,打造更完美、更经典的产品。 帝国CMS 6.6版新增了: ·...

    帝国网站管理系统 v6.6 繁体中文 UTF-8.zip

    帝国CMS 6.0版本开发了超容量负载的系统构架,6.5版本则是完善大数据功能,而6.6版本使系统各方面更加完善,新增了更多实用功能、更多细节优化。传承经典,打造更完美、更经典的产品。 帝国CMS 6.6版新增了: ·...

    帝国网站管理系统 v6.6 简体中文 GBK.zip

    帝国CMS 6.0版本开发了超容量负载的系统构架,6.5版本则是完善大数据功能,而6.6版本使系统各方面更加完善,新增了更多实用功能、更多细节优化。传承经典,打造更完美、更经典的产品。 帝国CMS 6.6版新增了: ·...

    帝国网站管理系统 v6.6 繁体中文 BIG5.zip

    帝国CMS 6.0版本开发了超容量负载的系统构架,6.5版本则是完善大数据功能,而6.6版本使系统各方面更加完善,新增了更多实用功能、更多细节优化。传承经典,打造更完美、更经典的产品。 帝国CMS 6.6版新增了: ·...

    java综合试题

    9. HQL 语句是 Hibernate 查询语言,用于实现数据库的查询操作。 10. 事务有两种:本地事务和分布式事务,本地事务用于实现单个数据库的事务管理,分布式事务用于实现多个数据库的事务管理。 本文档总结了 Java ...

    EXCEL集成工具箱V6.0

    【LED时钟与样式】 超漂亮的LED时钟,有默认时钟、蓝色时钟、经典时钟三种样式供选择。 【系统常用工具】 系统常用工具的快捷调用,例如:计算器、记事本、WORD、画图板。 【隐藏选项卡】 可以隐藏Excel2007及2010...

    EXCEL集成工具箱V8.0完整增强版(精简)

    【LED时钟与样式】 超漂亮的LED时钟,有默认时钟、蓝色时钟、经典时钟三种样式供选择。 【系统常用工具】 系统常用工具的快捷调用,例如:计算器、记事本、WORD、画图板。 【隐藏选项卡】 可以隐藏Excel2007及2010...

    Linux高性能服务器编程

    内容简介《Linux高性能服务器编程》是Linux服务器编程领域的经典著作,由资深Linux软件开发工程师撰写,从网络协议、服务器编程核心要素、原理机制、工具框架等多角度全面阐释了编写高性能Linux服务器应用的方法、...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    6. 步骤5/8:先决条件检查 如果你的电脑满足要求但仍然显示检查失败,这时候直接忽略,勾选全部忽略 7. 步骤6/8:概要信息 核对将要安装数据的详细信息,并保存响应文件,以备以后查看。然后点击完成数据库安装 ...

    iBATIS实战

    本书是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。...A.3 到哪里去查找更多的信息 269

    润满企业留言版 v5.0

    6、可以查询留言,条件丰富,管理员可以设置是否开放游客查询; 7、留言和回复都可以提供审核功能,没有经过审核的留言其他人不能察看留言和回复,而且还提供多条留言和回复的批量审核的功能,留言和回复都...

    易语言程序免安装版下载

    查找表项()”增加可空参数“列索引”,以指定查找哪一列。 12. 修改扩展界面支持库一,添加“工具条.置标题()”方法。 13. 修改高级表格支持库在表格空白处(所有单元格之外)单击鼠标导致当前光标处单元格自动...

    ASP网上购物系统旗舰版

    黑底深蓝、黑底炫彩、黑底深灰、黑底棕色、混合苍青、经典蓝色、朴素蓝色、 明亮蓝色、 精美浅蓝、 韵味深蓝、 品味棕色、 简洁灰色、 明亮银灰、 健康、 植物、 混合黄绿、 混合蓝绿、 可爱泡泡、 可爱洋红、 精美...

    Java虚拟机

    这本书的内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的...

    LINUX编程白皮书

    非常全的 讲linux编程的经典书籍。 本书对Linux操作系统及其编程作了整体的介绍,以支持用于开发软件的公开源码模型。对内存管理、进程及其通信机制、PCI、内核模块编程及内核系统结构作了详细的解释,且附有很多...

    TCPIP协议详解卷2:实现

    6.6.3 前提条件:SIOCSIFADDR、 SIOCSIFNETMASK和 SIOCSIFDSTADDR 132 6.6.4 地址指派:SIOCSIFADDR 133 6.6.5 in_ifinit函数 133 6.6.6 网络掩码指派:SIOCSIFNETMASK 136 6.6.7 目的地址指派:SIOCSIFDSTADDR ...

Global site tag (gtag.js) - Google Analytics