`
冷寒冰
  • 浏览: 251535 次
  • 性别: 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
分享到:
评论

相关推荐

    SQL查询语句大全集锦(超经典)_sql_

    本资源"SQL查询语句大全集锦(超经典)"为学习SQL提供了丰富的参考资料,旨在帮助用户更高效地掌握SQL的核心概念和实际应用。 一、SQL基础 SQL主要包括以下部分: 1. 数据定义语言(DDL):用于创建和修改数据库...

    超经典SQL语句全集

    超经典SQL语句全集涵盖了数据库管理、表操作、数据备份、索引、视图以及高级查询技巧等多个方面。在数据库管理中,SQL语句允许我们创建、删除和备份数据库。例如,`CREATE DATABASE` 用于创建新的数据库,`DROP ...

    c++课件 超级经典 超级经典

    以上只是C++基础知识的一部分,这个“超经典”课件很可能包含了更深入的主题,如STL的使用、设计模式、多线程编程、模板元编程等。通过深入学习和实践,你可以逐渐掌握这个强大的编程语言,为你的编程事业奠定坚实的...

    SQL查询语句大全集锦(超经典)

    ### SQL查询语句大全集锦(超经典) #### 一、简单查询 ##### (一)选择列表 在SQL中,选择列表(`SELECT`列表)是用于指定希望从数据库表中检索哪些列的重要组成部分。这一部分可以包含列名、表达式、常量或者函数...

    超经典,超实用sql

    "超经典,超实用sql"这个标题暗示了我们即将探讨的是SQL中一些常见的、高效的、且在实际工作中极具价值的语句和技巧。描述中提到,这些内容是作者在日常工作中积累的,因此它们具有很高的实用性和实战性。 1. **...

    超级C语言经典编程集合

    《超级C语言经典编程集合》是一个综合性的资源包,涵盖了C语言编程的多个重要方面。这个集合对于初学者和有经验的程序员来说都是一个宝贵的参考资料,它深入浅出地介绍了C语言的基础、进阶概念以及经典编程技巧。...

    超经典c#资源管理器

    4. 资源搜索:集成强大的搜索功能,允许用户快速查找特定文件或满足特定条件的文件。 5. 快捷方式:创建和管理快捷方式,以便快速访问常用文件或文件夹。 6. 资源打包与解包:能够将项目资源打包成单独的文件或资源...

    超经典SQL语句大全

    "超经典SQL语句大全"这份文档显然是为了帮助用户掌握SQL SERVER中的核心概念和常用语法。下面,我们将详细讨论SQL的关键字以及一些经典语句。 1. **SQL关键字**: SQL的关键字是构成SQL语句的基础,例如`SELECT`、...

    超级经典C语言程序/算法地道

    《超级经典C语言程序/算法地道》集合了多个C语言编程的经典实例,这些程序和算法设计独特,适合C语言初学者以及有一定基础的学习者进行深入研究。本文将围绕C语言程序设计的核心概念、常用算法以及如何通过这些经典...

    272个超酷经典推荐JavaScript代码

    12. **性能优化**:JavaScript的性能优化涉及很多方面,如减少DOM操作、使用缓存、避免全局查找、优化循环等。 13. **ES新特性**:从ES6开始,JavaScript引入了许多新的特性和语法,如箭头函数、解构赋值、模板字符...

    SQL查询语句大全集锦(超经典).doc

    简单查询通常由三个主要部分组成:选择列表(`SELECT`)、来源表或视图(`FROM`)以及筛选条件(`WHERE`)。接下来将详细介绍每个部分的功能及其用法。 ##### 1. 选择列表 (select_list) 选择列表指定了查询结果中...

    超经典的SQL语句大全

    "超经典的SQL语句大全"是一个集合了各种高效、实用的SQL语法示例的资源,对于学习和提升SQL技能极具价值。以下是基于这个主题的详细知识点讲解: 1. **基本查询**: - `SELECT`:用于从表中选取数据,如`SELECT * ...

    超经典的javascript ppt

    这份"超经典的JavaScript ppt"资源包含了一系列关于JavaScript的核心概念、语法和应用的讲解,是学习JavaScript的好帮手。 首先,JavaScript的基础部分涵盖变量、数据类型、运算符和控制结构。变量是存储数据的地方...

    魔乐在线Oracle笔记超经典.docx

    这份"魔乐在线Oracle笔记超经典.docx"涵盖了多个Oracle SQL查询的重要概念,主要包括多表查询、连接类型、SQL1999的支持、组函数和分组统计等。 首先,多表查询是数据库操作中的常见需求,它允许我们从两个或更多的...

    深入js编程网页收集 超级经典

    它的基础包括变量、数据类型(如字符串、数字、布尔值、null和undefined)、操作符(如算术、比较和逻辑操作符)、流程控制(如条件语句和循环)以及函数。 2. **对象与原型链**:JavaScript的对象基于原型,每个...

    SQL查询语句大全集锦超经典.doc

    它们分别说明所查询列、查询的表或视图、以及搜索条件等。 1. 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。 * 选择所有列:例如...

    C语言超经典算法大全.doc

    以上内容只是《C语言超经典算法大全》的部分概述,完整的文档包含了更多细节和具体的代码实现,对于学习和理解算法有着极大的帮助。通过学习这些经典算法,开发者能够提升解决问题的能力,掌握编程的核心技巧。

    一些超级经典的C语言编程题目

    例如,编写一个程序来反转字符串或者查找子串,都是锻炼数组和字符串操作的好题目。 4. **文件操作**:学习如何打开、读取、写入和关闭文件是C语言编程的重要部分。一道典型的题目可能要求从文件中读取数据并进行...

    超经典SQL关系代数笔试题

    本主题聚焦于“超经典SQL关系代数笔试题”,意味着我们将探讨一些在面试中可能遇到的核心概念和技术。无论你是准备应聘Oracle、MySql或其他SQL相关职位,熟悉这些知识点都是至关重要的。 1. **基本SQL概念**:SQL...

Global site tag (gtag.js) - Google Analytics