1. ALTER PROCEDURE _tmp
  2. @ID VARCHAR(50),
  3. @PN VARCHAR(50),
  4. @Type INT
  5. AS
  6. BEGIN
  7. /**********************************
  8. -- 功能:多条件查询性能
  9. _tmp 'K3G8KG6NN94SBBS0','K7F7FF',0
  10. **********************************/
  11. PRINT '测试数据条数500W'
  12.  
  13. set nocount ON
  14.  
  15. DECLARE @time DATETIME
  16. DECLARE @Warring VARCHAR(5000)
  17. IF(@Type=1 OR @Type=0)
  18. BEGIN
  19. SET @Warring=CHAR(10)+'第一种方式,直接拼SQL语句,有SQL注入漏洞';PRINT @Warring;SELECT @Warring
  20. SET @time=GETDATE()
  21.  
  22. DECLARE @SQL VARCHAR(4000)
  23. SELECT @SQL='SELECT * FROM dbo.tb_timetest WHERE 1=1'
  24. IF(ISNULL(@ID,'')<>'') SET @SQL=@SQL+' AND id='''+@ID+''''
  25. IF(ISNULL(@PN,'')<>'') SET @SQL=@SQL+' AND PN='''+@PN+''''
  26.  
  27. EXEC(@SQL)
  28.  
  29. PRINT '所需时间_毫秒'
  30. PRINT DATEDIFF(MILLISECOND,@time,GETDATE())
  31. END
  32. IF(@Type=2 OR @Type=0)
  33. BEGIN
  34. SET @Warring=CHAR(10)+'第二种方式,没有像第一种方式那样的SQL漏洞,但是性能大大折扣,就是耗时';PRINT @Warring;SELECT @Warring
  35. SET @time=GETDATE()
  36.  
  37. SELECT * FROM dbo.tb_timetest WHERE (ISNULL(@ID,'')=''OR id = @ID) AND (PN = @PN OR @PN IS NULL)
  38.  
  39. PRINT '所需时间_毫秒'
  40. PRINT DATEDIFF(MILLISECOND,@time,GETDATE())
  41. END
  42. IF(@Type=3 OR @Type=0)
  43. BEGIN
  44. SET @Warring=CHAR(10)+'第三种方式,虽然写法没有第二种简洁,但是也没有像第一种方式那样的SQL注入漏洞,是本人目前能想到最优的';PRINT @Warring;SELECT @Warring
  45. SET @time=GETDATE()
  46.  
  47. DECLARE @S NVARCHAR(4000),@P NVARCHAR(4000)
  48. SET @P=N'@ID VARCHAR(50),@PN VARCHAR(50)'
  49. SET @S='SELECT * FROM dbo.tb_timetest WHERE 1=1'
  50. IF(ISNULL(@ID,'')<>'') SET @S=@S+' AND id = @ID'
  51. IF(ISNULL(@ID,'')<>'') SET @S=@S+' AND PN = @PN'
  52.  
  53. EXEC sp_executesql @S,@P,@ID=@ID,@PN=@PN
  54.  
  55. PRINT '所需时间_毫秒'
  56. PRINT DATEDIFF(MILLISECOND,@time,GETDATE())
  57. END
  58. END

SQL多条件查询安全高效比较的更多相关文章

  1. util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案

    ylbtech-funcation-util:  C# 复杂条件查询(sql 复杂条件查询)查询解决方案 C# 复杂条件查询(sql 复杂条件查询)查询解决方案 1.A,Ylbtech.Model返回 ...

  2. Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...

  3. Webform中linq to sql多条件查询(小练习)

    多条件查询:逐条判断,从第一个条件开始判断,如果满足,取出放入集合,再从集合中查询第二个条件... aspx代码: <body> <form id="form1" ...

  4. SQL 多条件查询

    网上有不少人提出过类似的问题:“看到有人写了WHERE 1=1这样的SQL,到底是什么意思?”.其实使用这种用法的开发人员一般都是在使用动态组装的SQL.让我们想像如下的场景:用户要求提供一个灵活的查 ...

  5. C# SQL多条件查询拼接技巧

    本文转载:http://blog.csdn.net/limlimlim/article/details/8638080 #region 多条件搜索时,使用List集合来拼接条件(拼接Sql) Stri ...

  6. SQL 变量 条件查询 插入数据

    (本文只是总结网络上的教程) 在操作数据库时 SQL语句中难免会用到变量 比如 在條件值已知的情況下 INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值 ...

  7. sql---如何把sql查询出来的结果当做另一个sql的条件查询,1、语句2、with as

    '; -- table2 的 name 作为 table1的条件 select * from table1 where name in (select name from table2) --如果有多 ...

  8. qt sql多重条件查询简便方法

    转载请注明出处:http://www.cnblogs.com/dachen408/p/7457312.html 程序设计过程中,经常要涉及到查询,并且有很多条件,且条件可为空,如果逐个判断,会有很多情 ...

  9. C# SQL 多条件查询技巧

    #region 多条件搜索时,使用List集合来拼接条件(拼接Sql) StringBuilder sql = new StringBuilder("select * from PhoneN ...

随机推荐

  1. Silverlight ModelView中调用UI进程

    Silverlihgt:  Deployment.Current.Dispatcher.BeginInvoke wpf: App.Current.Dispatcher.Invoke  

  2. ionic入门之AngularJS扩展基本布局

    目录: 标题栏 : ion-header-bar 页脚栏 : ion-footer-bar header/footer : 样式及内容 内容区 : ion-content 滚动框 : ion-scro ...

  3. Ceph的客户端安装

    Contents [hide] 1 参考 1.1 ceph端口访问控制 1.2 用Kernel方式挂载 1.2.1 安装ELRepo及kernel-lt 1.2.2 修改Grub引导顺序并重启动 1. ...

  4. Android NDK 开发(四)java传递数据到C【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处 ...

  5. V4L2驱动程序框架架构【转】

    本文转载自:http://blog.csdn.net/tommy_wxie/article/details/11728809 1 V4L2简介 video4linux2(V4L2)是Linux内核中关 ...

  6. Ubuntu 14.04下NFS安装配置

    1.安装nfs-server # apt-get install nfs-kernel-server 2.建立nfs专用文件夹 # mkdir /data/disk1 3.配置nfs # vi /et ...

  7. 层叠样式表(CSS)

    层叠样式表(CSS) CSS(Cascading Style Sheet)中文译为层叠样式表.是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言.CSS的引入就是为了使得HTML语言能够 ...

  8. [BIM]案例

    以下是中建三局BIM小组的项目,用以参考: BIM协同设计与质量控制 现实建筑物实体都是以三维空间状态存在,若用三维设计表达更具有优势.如复杂管综设计,一般情况下,二维AutoCAD设计是在建筑.结构 ...

  9. ajax 无刷新分页

    //ajax 无刷新分页1.前台要做的 滑动时 当前page+1,通过page ajax请求后台接口获取数据将数据进行拼装;2.后台要做的 做分页接口返回json数据前台判断触发请求条件: var p ...

  10. Winform知识点

    Winform窗体常用的控件 1.按钮 Button 前缀:btn 2.文本框 TextBox 前缀:txt 3.单选按钮 RadioButton 前缀:rdo 4.复选按钮 CheckBox 前缀: ...