我们在进行项目开发中,经常会遇到多条件模糊查询的需求。对此,我们常见的解决方案有两种:一是在程序端拼接SQL字符串,根据是否选择了某个条件,构造相应的SQL字符串;二是在数据库的存储过程中使用动态的SQL语句。其本质也是拼接SQL字符串,不过是从程序端转移到数据库端而已。

这两种方式的缺点是显而易见的:一是当多个条件每个都可为空时,要使用多个if语句进行判断;二是拼接的SQL语句容易产生SQL注入漏洞。

最近写数据库存储过程的时候经常使用case when 语句,正好可以用这个语句解决一下以上问题。以SQL中的NorthWind数据库为例,我要操作的是其中的Employees表,该表中默认数据如下:

使用如下脚本来查询表中数据:

代码

 DECLARE @FirstName NVARCHAR(),      @LastName  NVARCHAR();  SELECT @FirstName = '',      @LastName = '';  SELECT *  FROM  Employees c  WHERE CHARINDEX(        (          CASE            WHEN @FirstName = '' THEN FirstName           ELSE @FirstName         END       ),       FirstName     ) >      AND CHARINDEX(         (CASE WHEN @LastName = '' THEN LastName ELSE @LastName END),         LastName       ) > 

我们把第二行的@FirstName变量赋值为'n'试试,会把所有FirstName字段中包含字符串'n'的记录查出来,如下图:

如果我们再把第三行的@LastName变量赋值为'd'试试,结果会把所有FirstName字段包含'n'并且LastName字段包含'd'的记录查出来,如下图:

通过以上例子我们可以看到,通过给两个变量传递不同的值,就可以根据多条件进行模糊查询了,如果把上面的语句写在存储过程中,就可以不必再拼接SQL语句了,也不会出现注入式问题了。

更多相关文章

  1. Android(安卓)模糊搜索rawquery bind or column index out of ra
  2. Android横向智能刷新框架-SmartRefreshHorizontal+ScrollView 实
  3. Android(安卓)模糊效果 FastBlur
  4. android实现图片模糊背景效果
  5. android背景模糊化处理
  6. Android(安卓)模糊搜索rawquery bind or column index out of ra
  7. Android(安卓)高斯模糊 RenderScript封装工具类
  8. Android(安卓)模糊搜索rawquery bind or column index out of ra
  9. Android(安卓)快速模糊

随机推荐

  1. php中global的作用
  2. 要求PIN使用Symfony2登录
  3. PHP中是否存在“clamp”数字函数?
  4. php评论回复无限极嵌套如何实现?已写基本
  5. 短期项目求PHP开发人员或开发团队(2-3名),并
  6. 如何将JSON传回PHP的AJAX请求?
  7. PHP限制HTML内容中图片必须是本站的方法
  8. php网站 手机归属地查询接口
  9. PHP日期添加1年到当前日期。
  10. PHP将邮件发送到多个电子邮件地址