查询条件可变的存储过程

----查询条件可变的存储过程
alter proc usp_guestsearch
@guestname nvarchar(50)=null,                       ----创建存储过程定义多个变量,并赋予默认值为null
@guestcardid nvarchar(50)=null
as
declare @sql nvarchar(2000)=‘select * from guest ‘  ----创建无条件语句的SQL语句
declare @haswhere bit=0                             ----定义变量表示是否含有where语句,初始值为0(否)
    if(@guestname is not null)                      ----如果变量不为空,因为是第一个变量,所以不用判断是否含有where(必定没有)
            begin
                set @sql+=‘ where [email protected]‘  ----SQL语句拼接带有where的条件,
                set @haswhere=1                     ----将haswhere改为1(是)表示已包含where语句
            end
    if(@guestcardid is not null)
        if(@haswhere=0)                             ----判断是否含有where
            begin
                set @sql+=‘ where [email protected]‘
                set @haswhere=1
        end
        else
        set @sql+= ‘ and [email protected]‘

exec sp_executesql @sql, N‘@name nvarchar(50)‘,@name=@guestname     ---执行拼接后的SQL语句
go

-------------执行拼接后的SQL语句,为调用存储过程sp_executesql
-------------这部分需要注意,因为拼接后的SQL语句实际是字符串,不属于语句,所以执行存储过程需要三个变量:
                                                                                                ------1、SQL语句
                                                                                                ------2、定义变量
                                                                                                ------3、变量接受存储过程传递进来的参数
-------------示例:select * from guest where [email protected]  @name nvarchar(50), @[email protected]
时间: 2024-08-04 14:06:06

查询条件可变的存储过程的相关文章

存储过程中使用参数和变量作为查询条件对性能的影响?

今日匆忙中写了2各存储过程,查询的表,查询的结构,返回的值基本一样,就是对参数的使用有点不同. 晚上到家想着优化下,看看能不能合并了.在几次重写后,拿着几个版本查看执行计划时,发现个以前没注意的问题. 第一个SP传入的2个时间参数直接用于里面的查询条件. 第二个SP传入的2个时间参数,在SP内又定义了2个时间变量,将参数通过简单计算后Set给了2个变量,然后在查询中使用这2个变量作为条件. 这2个SP,在执行开销上相差数倍. 在外面套一层SP,把时间算好了再当参数传给第二个SP,修改SP直接使用

自定义查询条件存储过程

create procedure pro_aaa (     @canshu1 nvarchar(200),     @canshu2 nvarchar(200) )  as  begin  declare @strsql nvarchar(2000)  set @strsql='select * from table1 where 1=1'[email protected]  exec(@strsql)  end 自定义查询条件存储过程

SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法

本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种写法孰优孰劣,该选用那种写法,以及各种写法优缺点,本文以一个简单的查询存储过程为例,简单说一下各种写法的区别,以及该用那种写法专业DBA以及熟悉数据库的同学请无视. 废话不多,上代码说明,先造一个测试表待用,简单说明一下这个表的情况 类似订单表,订单表有订单ID,客户ID,订单创建时间等,查询条件是

重构之路 组合查询之传参+存储过程

上篇博文给大家一起讨论了实现组合查询的一种方法,即在U层将select语句的where子句部分组装好,赋给一个字符串变量,传到D层然后与select子句组成完整的sql语句,之后执行,返回查询结果,就是这么简单,但是博文的结尾也留下了一个疑问,这种方法的安全性有点欠佳,有没有相对好一点的办法呢? 答案是肯定的,这次我们一起来看看我实现的另一种方法.首先给大家简单介绍一下这种方法的思路,其实也比较简单,最初我是想在程序代码里写sql查询语句的,然后将组合查询的各个条件的值当做实体参数(现在实体层定

指定查询条件,查询对应的集合List(单表)

TestDao.java(测试类) @Test public void findCollectionByConditionNoPage(){  ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");  IElecTextService elecTextService = (IElecTextService) ac.getBean(IElecTextService.SERVICE_NAME);   

MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查询条件分页

前几天做一个小小小项目,使用了MVC+Bootstrap,以前做分页都是异步加载Mvc部分视图的方式,因为这个是小项目,就随便一点.一般的列表页面,少不了有查询条件,下面分享下Drapper+PagedList.Mvc支持多查询条件分页的使用经验. 在MVC中我们一般习惯使用强类型Model,通过分析Orders的展示页面,来构建这个Model. 1.查询参数的Model public class OrderQueryParamModel { /// <summary> /// 订单编号 //

重构之路 组合查询之传參+存储过程

上篇博文给大家一起讨论了实现组合查询的一种方法,即在U层将select语句的where子句部分组装好,赋给一个字符串变量.传到D层然后与select子句组成完整的sql语句.之后运行.返回查询结果,就是这么简单.可是博文的结尾也留下了一个疑问,这样的方法的安全性有点欠佳,有没有相对好一点的办法呢? 答案是肯定的.这次我们一起来看看我实现的还有一种方法.首先给大家简介一下这样的方法的思路,事实上也比較简单,最初我是想在程序代码里写sql查询语句的,然后将组合查询的各个条件的值当做实体參数(如今实体

2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )

一句话概括的话,SQL作为结构化查询语言,是标准的关系型数据库通用的标准语言: T-SQL 是在SQL基础上扩展的SQL Server中使用的语言 1,普通查询 #查询Info表中的所有列 select * from Info #查询Info表中的Name和Code列 select Name,Code from Info 2,条件查询 关键字where #查询Info表的左右列 限定范围 列名为p001 select * from Info where 列名="p001" #查询条件之

LINQ to SQL 运行时动态构建查询条件

在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语句更麻烦一些.本文介绍了3种运行时动态构建查询条件的方法. 本文中的例子最终实现的都是同一个功能,从Northwind数据库Customers表中搜索出CompanyName列带有keywords中任意元素的项.keywords是个字符串数组,该数组长度在编译时是不确定的.思路及方法说明写在代码注释中. 1.表达式树 1   public static IEnumerable<Customers>