动态SQL与SQL注入(一)动态SQL
SQL Server提供了2个用于执行动态构造的代码字符串命令,分别为exec和sp_executesql.
Exec 有两种用法:一种是执行一个存储过程。
表结构及测试数据如下:
create table [User]
(
userid int identity primary key,
userName nvarchar(8),
pwd nvarchar(18),
city nvarchar(20),
[type] bit,
createtime datetime default getdate()
)
insert into [User] (userName,pwd,city,[type])
select 'a','aa','beijing',1 union
select 'b','bb','shanghai',1 union
select 'c','cc','tianjin',0 union
select 'd','dd','tianjin',0
存储过程如下:
create procedure pro_GetUserbyCity
@City nvarchar(20)
as
begin
select * from [user] where city=@City
end
执行存储过程:
exec pro_GetUserbyCity 'tianjin'
另一种用来执行字符串:
Exec(string)必须用括号括起来
declare @city nvarchar(20), @sql nvarchar(50)
set @city='tianjin'
--set @sql='select * from [user] where city='''+CONVERT(nvarchar,@city)+'''' --有SQL注入危险
set @sql='select * from [user] where city='+QUOTENAME(@city,'''')
print @sql
exec(@sql)
执行结果同上
sp_executesql:可以提供输入参数和输出参数:此外sql 语句必须是unicode(nvarchar)类型的
用法:
Exec sp_executesql
@sql,--要执行的语句
@params ,--语句当中的参数
@assignment—给参数赋值
declare @city nvarchar(20), @sql nvarchar(50)
set @city='tianjin'
set @sql=N'select * from [user] where city=@c'
print @sql
exec sP_executesql @sql,N'@c as nvarchar(20)',@city
执行结果同上
带返回值的
declare @city nvarchar(20), @sql nvarchar(100),@num int
set @city='tianjin'
set @sql=N'select @n=count(*) from [user] where city=@c;select @n;'
print @sql
exec sP_executesql @sql,N'@c as nvarchar(20),@n as int output',@city,@num
执行结果如下
转载于:https://www.cnblogs.com/wzpo/archive/2010/05/13/1734620.html
动态SQL与SQL注入(一)动态SQL相关推荐
- sql通用防注入程序php,sql通用防注入系统_PHP教程
sql通用防注入系统 本文章提供这款防sql注入代码是一款php sql 双过滤非法字符的函数,他可以根据用户自定的防sql注入哦,先是过滤一些sql命令,再是就是把post get 过滤一次,最好验 ...
- 【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )
文章目录 一.注入本质 二.静态注入和动态注入 三.静态注入两种方式 ( 修改动态库重打包 | 修改 /data/app/packageName/libs/ 下的动态库 ) 一.注入本质 进程注入本质 ...
- SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?
前言 之前我们已经讨论过动态SQL查询呢?这里为何再来探讨一番呢?因为其中还是存在一定问题,如标题所言,很多面试题也好或者有些博客也好都在说在执行动态SQL查询时sp_executesql的性能比ex ...
- 【Java调试】通过SqlSessionFactory类对象获取mapper文件内的动态SQL在执行时的完整SQL及参数(2种使用方法+测试Demo及结果)
1. 问题 最近开发新功能,调试 mapper.xml 里的SQL,遇到了极其痛苦的事情: 没有 p6spy SQL无法输出到工作台. mapper 接口没有实现 MyBatis 的 BaseMapp ...
- ORACLE数据库之PL/SQL触发器、rownum、动态SQL、数据库之视图与索引
WHEN子句说明触发约束条件.Condition为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL函数.WHEN子句指定的触发约束条件只能用在BEFORE和AFTER行 ...
- flink sql udf jar包_FlinkSQL 动态加载 UDF 实现思路
导读: 最近在对 Flink 进行平台化,基于 REST API 构建一个平台实现通过纯 SQL 化编写和管理 Job.尽管 Flink官方希望用户将所有的依赖和业务逻辑打成一个fat jar,这样方 ...
- Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码
<Windows Azure Platform 系列文章目录> 我们在使用关系型数据的时候,有时候希望: - 管理员admin,可以查看到所有的数据 - 普通用户,某些敏感字段,比如信用卡 ...
- sql 写query_为什么需要动态SQL
为什么需要动态SQL 在使用 EF或者写 SQL语句时,查询条件往往是这样一种非常常见的逻辑:如果客户填了查询信息,则查询该条件:如果客户没填,则返回所有数据. 我常常看到很多人解决这类问题时使用了错 ...
- mysql动态sql是什么,mysql中动态sql的一次实际应用
一.前言 本次实际应用中,使用到了如下几个要点: mysql的动态建表; mysql的多表插入; mysql的多表更新; mysql的多表删除; 二.使用场景 2.1 动态建表 要求建立多个表,例如电 ...
- 【Flink】Flink 源码阅读笔记(18)- Flink SQL 中的流和动态表
1.概述 转载:Flink 源码阅读笔记(18)- Flink SQL 中的流和动态表
最新文章
- 亿级PV,常见性能优化策略总结与真实案例
- 基于飞桨PaddlePaddle的语义角色标注任务全解析
- 天问电子少年团DIY作品
- 腾达fh365虚拟服务器,腾达(Tenda)FH365路由器怎么设置?
- JavaScript可否多线程? 深入理解JavaScript定时机制
- leetcode142. 环形链表 II(暴力+双链表)
- cxxtest单元测试框架源码分析(二):所有对外功能实现分析
- 在下列计算机应用项目中,属于过程控制应用领域的是,计算机基础试题.ppt
- Java 1.2.2 格式化输出
- 【iOS开发】修改图片的大小分辨率 使用mac
- 单目标决策---决策的分类
- 黄聪:C#使用能够foreach对hashtable、List遍历时“集合已修改;可能无法执行枚举操作。”错误...
- 用虚拟机在一台电脑上实现xPC实时仿真
- 一键清理C盘垃圾文件,让你的电脑运行飞起
- 收文和发文管理流程分析
- FFT中频谱泄露的两种理解
- 定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2()
- unity-单例模式
- VMware虚拟机中摄像头打开显示黑屏或者摄像头打开无法弹出窗口的解决办法
- android button的美化