码迷,mamicode.com
首页 > 其他好文 > 详细

查询条件可变的存储过程

时间:2015-02-04 09:17:39      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

----查询条件可变的存储过程
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 guestname=@name  ----SQL语句拼接带有where的条件,
                set @haswhere=1                     ----将haswhere改为1(是)表示已包含where语句
            end                               
    if(@guestcardid is not null)                    
        if(@haswhere=0)                             ----判断是否含有where
            begin 
                set @sql+= where guestcardid=@guestcardid
                set @haswhere=1
        end
        else 
        set @sql+=  and guestcardid=@guestcardid

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

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

 

查询条件可变的存储过程

标签:

原文地址:http://www.cnblogs.com/ianism/p/4271492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!