SQL多条件查询安全高效比较
ALTER PROCEDURE _tmp
@ID VARCHAR(50),
@PN VARCHAR(50),
@Type INT
AS
BEGIN
/**********************************
-- 功能:多条件查询性能
_tmp 'K3G8KG6NN94SBBS0','K7F7FF',0
**********************************/
PRINT '测试数据条数500W' set nocount ON DECLARE @time DATETIME
DECLARE @Warring VARCHAR(5000)
IF(@Type=1 OR @Type=0)
BEGIN
SET @Warring=CHAR(10)+'第一种方式,直接拼SQL语句,有SQL注入漏洞';PRINT @Warring;SELECT @Warring
SET @time=GETDATE() DECLARE @SQL VARCHAR(4000)
SELECT @SQL='SELECT * FROM dbo.tb_timetest WHERE 1=1'
IF(ISNULL(@ID,'')<>'') SET @SQL=@SQL+' AND id='''+@ID+''''
IF(ISNULL(@PN,'')<>'') SET @SQL=@SQL+' AND PN='''+@PN+'''' EXEC(@SQL) PRINT '所需时间_毫秒'
PRINT DATEDIFF(MILLISECOND,@time,GETDATE())
END
IF(@Type=2 OR @Type=0)
BEGIN
SET @Warring=CHAR(10)+'第二种方式,没有像第一种方式那样的SQL漏洞,但是性能大大折扣,就是耗时';PRINT @Warring;SELECT @Warring
SET @time=GETDATE() SELECT * FROM dbo.tb_timetest WHERE (ISNULL(@ID,'')=''OR id = @ID) AND (PN = @PN OR @PN IS NULL) PRINT '所需时间_毫秒'
PRINT DATEDIFF(MILLISECOND,@time,GETDATE())
END
IF(@Type=3 OR @Type=0)
BEGIN
SET @Warring=CHAR(10)+'第三种方式,虽然写法没有第二种简洁,但是也没有像第一种方式那样的SQL注入漏洞,是本人目前能想到最优的';PRINT @Warring;SELECT @Warring
SET @time=GETDATE() DECLARE @S NVARCHAR(4000),@P NVARCHAR(4000)
SET @P=N'@ID VARCHAR(50),@PN VARCHAR(50)'
SET @S='SELECT * FROM dbo.tb_timetest WHERE 1=1'
IF(ISNULL(@ID,'')<>'') SET @S=@S+' AND id = @ID'
IF(ISNULL(@ID,'')<>'') SET @S=@S+' AND PN = @PN' EXEC sp_executesql @S,@P,@ID=@ID,@PN=@PN PRINT '所需时间_毫秒'
PRINT DATEDIFF(MILLISECOND,@time,GETDATE())
END
END
SQL多条件查询安全高效比较的更多相关文章
- util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案
ylbtech-funcation-util: C# 复杂条件查询(sql 复杂条件查询)查询解决方案 C# 复杂条件查询(sql 复杂条件查询)查询解决方案 1.A,Ylbtech.Model返回 ...
- Mybatis中动态SQL多条件查询
Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...
- Webform中linq to sql多条件查询(小练习)
多条件查询:逐条判断,从第一个条件开始判断,如果满足,取出放入集合,再从集合中查询第二个条件... aspx代码: <body> <form id="form1" ...
- SQL 多条件查询
网上有不少人提出过类似的问题:“看到有人写了WHERE 1=1这样的SQL,到底是什么意思?”.其实使用这种用法的开发人员一般都是在使用动态组装的SQL.让我们想像如下的场景:用户要求提供一个灵活的查 ...
- C# SQL多条件查询拼接技巧
本文转载:http://blog.csdn.net/limlimlim/article/details/8638080 #region 多条件搜索时,使用List集合来拼接条件(拼接Sql) Stri ...
- SQL 变量 条件查询 插入数据
(本文只是总结网络上的教程) 在操作数据库时 SQL语句中难免会用到变量 比如 在條件值已知的情況下 INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值 ...
- sql---如何把sql查询出来的结果当做另一个sql的条件查询,1、语句2、with as
'; -- table2 的 name 作为 table1的条件 select * from table1 where name in (select name from table2) --如果有多 ...
- qt sql多重条件查询简便方法
转载请注明出处:http://www.cnblogs.com/dachen408/p/7457312.html 程序设计过程中,经常要涉及到查询,并且有很多条件,且条件可为空,如果逐个判断,会有很多情 ...
- C# SQL 多条件查询技巧
#region 多条件搜索时,使用List集合来拼接条件(拼接Sql) StringBuilder sql = new StringBuilder("select * from PhoneN ...
随机推荐
- CDC
CDC中最重要的问题是metastability问题. 加入Synchronizer来进行异步时钟的同步,两级的Sync,第二级仍然会出现亚稳态的概率由MTBF决定. MTBF:mean time b ...
- 记centos7中的network.service启动失败
查看启动失败的服务: systemctl --failed 然后就发现了一个叫network.service 的服务启动失败了. 后来找到了原因, 是因为配置文件中没有写上网卡的硬件地址 配置文件所在 ...
- zw版_Halcon图像库delphi接口文件
zw版_Halcon图像库delphi接口文件 Halcon图像库delphi接口文件,根据安装时用户设置的文件目录不同,会有所差异,笔者一般安装在delphi的import目录下. 参见:& ...
- location.reload()加载时有弹出框
解决办法: 1.试试 window.location.href=window.location.href 2.当前页有被post数据的时候reload就会提示刷新 可以尝试重新定向页面地址 3.rel ...
- 初学android的第一个习作
首发:个人博客,更新&纠错&回复 项目源码在这里,因为github上传速度太差,传到了oschina的git托管上. 1.项目结构及技术点 主页面使用FragmentTabHost,5 ...
- plsql 简单介绍
plsql的安装: 1. 安装plsql developer 2. 下载,解压instantclient到任意目录 3. 在instantclient解压目录下,新建NETWORK目录,在该目录下建A ...
- centos查看磁盘扇区大小等信息
fdisk -l 说明一下: “Disk /dev/sda: 53.7 GB, 53687091200 bytes” 表示第一块磁盘的大小为53.7GB. "255 heads"表 ...
- JavaEE基础(十七)/集合
1.集合框架(HashSet存储字符串并遍历) A:Set集合概述及特点 通过API查看即可 B:案例演示 HashSet存储字符串并遍历 HashSet<String> hs = new ...
- Prince2七大原则(3)
Prince2七大原则(3) 我们先来回顾一下,PRINCE2七大原则分别是持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第三个原则:明确定义的角色和职责. 项目离不开 ...
- css缩写
颜色: 16进制的色彩值为六位数,如果每两位的值相同,可以缩写一半. 如:#000000=#000: #223344=#234: 盒子的尺寸: 如margin:value; 一个值表示所有边,两个值表 ...