SQLServer 存储过程中不拼接SQL字符串实现多条件查询

转载 2016年05月31日 15:59:08

最近在工作中要使用存储过程,因为前端页面传过来的下拉菜单的值不固定,数据是这样的,0是全部,1是男,2是女,当选择全部时,要能查询出所有的用户,否则只能查询出来男的用户或者女的用户,一般都是在存储过程中写

declare @sql nvarchar(500), @str nvarchar(20)

set @str = 'and sex = 1'

set @sql = 'select * from 表 where id >0 '+ @str

exec sp_executesql @sql  或者 exec(@sql)

后来看了一篇博客发现还有另一种写法

下面是 不采用拼接SQL字符串实现多条件查询的解决方案
  第一种写法是 感觉代码有些冗余
  if (@addDate is not null) and (@name <> '') 
   select * from table where addDate = @addDate and name = @name 
  else if (@addDate is not null) and (@name ='') 
   select * from table where addDate = @addDate 
  else if(@addDate is null) and (@name <> '') 
   select * from table where and name = @name 
  else if(@addDate is null) and (@name = '') 
  select * from table 
  第二种写法是 
  select * from table where (addDate = @addDate or @addDate is null) and (name = @name or @name = '')
  第三种写法是 
  SELECT * FROM table where 
  addDate = CASE @addDate IS NULL THEN addDate ELSE @addDate END, 
  name = CASE @name WHEN '' THEN name ELSE @name END


引用博客地址:http://uule.iteye.com/blog/1988137


关于SQLServer存储过程动态拼接,模糊查询的处理

在进行sql存储过程的动态拼接时,有可能会有特殊符号,如" ' "这种符号的拼接,造成数据库的安全隐患,造成sql注入危险。为了避免sql注入,sqlserver2005之后中可以用sp_execut...
  • u013625950
  • u013625950
  • 2015年04月07日 09:44
  • 1717

Oracle存储过程拼接in语句 & 自定义split函数

关于Oracle存储过程中拼接in语句以及自定义split函数
  • wlwlwlwl015
  • wlwlwlwl015
  • 2016年05月20日 09:55
  • 2318

SqlServer参数化查询与存储过程

突然把参数化查询和存储过程联系到一起了,大家如果不知道的话,一起来看看吧。...
  • xiaouncle
  • xiaouncle
  • 2016年08月14日 18:21
  • 1821

c#多条件查询存储过程实例

  • 2009年01月05日 14:23
  • 857B
  • 下载

使用MVC,实现多条件查询,排序与分页 的 存储过程

ViewModel:  #region 交易信息列表     public class ProjectInfoList     {         ///         /// 交易信息...
  • u010796875
  • u010796875
  • 2014年07月16日 18:16
  • 748

repeater插入,多选删除,条件查询实例(存储过程实现)

前台:基本实现页面,全选js等                     function Check() {             var oElements = documen...
  • liziki
  • liziki
  • 2012年08月16日 09:59
  • 485

SQL Server交叉查询存储过程实现(带查询条件)

  • 2013年04月16日 17:27
  • 82KB
  • 下载

SqlServer分页存储过程(多表查询,多条件排序),Repeater控件呈现数据以及分页

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如...
  • limingblogs
  • limingblogs
  • 2016年04月25日 21:53
  • 1359

万能分页存储过程(带第一页性能优化,任意条件查询,任意字段排序)

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO /* 分页排序存储过程 V1.0 */ create procedure [...
  • hunzi6
  • hunzi6
  • 2012年05月23日 10:15
  • 145

解决存储过程中SQL字符串语句执行引入参数的问题

最近在写存储过程的时候,发现一个问题,是关于存储过程中字符串SQL中引入参数的问题。 且看下例: declare @count int select @count=count(*) from ...
  • chamychen
  • chamychen
  • 2013年05月17日 10:27
  • 4082
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQLServer 存储过程中不拼接SQL字符串实现多条件查询
举报原因:
原因补充:

(最多只允许输入30个字)