普通SQL语句可以用Exec执行
例如存储过名为:myprocedure
- use AdventureWorks
- create procedure myprocedure @city varchar(20)
- as
- begin
- select * from Person.Address
- end
- exec myprocedure @city = 'Bothell'
- --或
- exec myprocedure 'Bothell'
二、使用EXEC执行动态的SQL语句
注意:动态的sql必须包含于圆括号内如:
- exec ('select * from mytable')
使用EXEC执行动态sql语句注意下面问题
1.不能有输入参数,输出参数
下面的脚本是错误的:
- DECLARE @i AS INT;
- SET @i = 10248;
- DECLARE @sql AS VARCHAR(52);
- SET @sql = 'SELECT * FROM dbo.Orders WHERE OrderID = @i;';
- EXEC(@sql);
- GO
2.园括号内部能使用函数或case表达式
下面的脚本是错误的:
- DECLARE @schemaname AS NVARCHAR(128), @tablename AS NVARCHAR(128);
- SET @schemaname = N'dbo';
- SET @tablename = N'Order Details';
- EXEC(N'SELECT COUNT(*) FROM '
- + QUOTENAME(@schemaname) + N'.' + QUOTENAME(@tablename) + N';');
- GO
不过把函数放在变量中是可以的:
- DECLARE
- @schemaname AS NVARCHAR(128),
- @tablename AS NVARCHAR(128),
- @sql AS NVARCHAR(539);
- SET @schemaname = N'dbo';
- SET @tablename = N'Order Details';
- SET @sql = N'SELECT COUNT(*) FROM '
- + QUOTENAME(@schemaname) + N'.' + QUOTENAME(@tablename) + N';'
- EXEC(@sql);
3.不能利用重用执行计划,存所以存在性能问题
- DECLARE @i AS INT;
- SET @i = 10248;
- DECLARE @sql AS VARCHAR(52);
- SET @sql = 'SELECT * FROM dbo.Orders WHERE OrderID = '
- + CAST(@i AS VARCHAR(10)) + N';';
- EXEC(@sql);
- GO
当@i = 10248, 10249, 10250要生成3个执行计划。
4。容易被sql注入,存在安全问题。
- DECLARE @lastname AS NVARCHAR(40), @sql AS NVARCHAR(200);
- SET @lastname = N''' DROP TABLE dbo.Employees --';
- SET @sql = N'SELECT * FROM dbo.Employees WHERE LastName = '''
- + @lastname + ''';';
- EXEC @sql;
- GO
实际执行的sql为:
- SELECT * FROM dbo.Employees WHERE LastName = '' DROP TABLE dbo.Employees --';
普通SQL语句可以用Exec执行的更多相关文章
- 动态sql语句基本语法--Exec与Exec sp_executesql 的区别
http://www.cnblogs.com/goody9807/archive/2010/10/19/1855697.html 动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 ...
- [sqlserver脚本]查看指定SQL语句生成了哪些执行计划
参考SQL技术内幕写了一段脚本,可以通过这段脚本查看执行指定SQL语句后,系统生成了哪些执行计划.使用时注意以下几点: 修改use MyTest,换成自己的数据库名字. 将 exec sp_page_ ...
- SQL语句到底是怎么执行的
写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必要了解一下sql语句的执行顺序.可以有时间自己写一个简单的数据库,理解会更加深入.下面就 ...
- SQL 语句在查询分析器执行很快,程序 Dapper 参数化查询就很慢(parameter-sniffing)
这个问题困扰我好长时间了,使用SQLSERVER 事务探查器找到执行超时的SQL语句,参数查询都是通过执行exe sp_executesql 的存储过程调用,因为它能够分析并缓存查询计划,从而优化查询 ...
- 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction
今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...
- 009 面试题 SQL语句各部分的执行顺序
SQL语句各部分的执行顺序 select distinct...from t1 (left/right) join t2 on t1.xx=t2.xx where t1.xx=? and t2.xx= ...
- SQL 语句与性能之执行顺序
select * , t3.Name from t1 left join t2 on t1.sysno = t2.Asysno left join t3 on t3.sysno = t2.Bsysno ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- 如何测试sql语句性能,提高执行效率
有时候我们经常为我们的sql语句执行效率低下发愁,反复优化后,可还是得不到提高 那么你就用这条语句找出你sql到底是在哪里慢了 示例: SET STATISTICS io ON SET ...
随机推荐
- Java实现Socket5代理服务器
直接贴代码,不解释 1 主服务,用来侦听端口 package org.javaren.proxy; import java.net.ServerSocket; import java.net.Sock ...
- 5 Tips for creating good code every day; or how to become a good software developer
Being a good developer is like being any other good professional, it’s all it’s about doing as much ...
- 10.23lamp环境
前序: 查考文章:http://www.cnblogs.com/mchina/archive/2012/11/28/2778779.html http://www.centos.bz/2011/09/ ...
- 【社招】来杭州吧,阿里国际UED招前端~~
来杭州吧,阿里国际UED招前端~~ 依稀记得,几年前在北京的日子,两点一线的生活方式,似乎冲淡模糊了身边的一切,印象最深刻的莫过于北京的地铁站了吧(因为只有等地铁,搭地铁的时候,才能够停下脚步,静静地 ...
- POJ 3020 Antenna Placement
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5645 Accepted: 2825 Des ...
- html 的table tr td的使用
cellspacing 属性规定单元格之间的空间. cellpadding 属性规定单元边沿与其内容之间的空白. border 简写属性在一个声明设置所有的边框属性. border 用在table属性 ...
- Win10如何隐藏Windows Defender任务栏图标
导读 Windows 10 至发布以来就内置集成了 Windows Defender 安全防护应用,但有许多用户平常压根儿就没注意到它的存在.微软为了使安全防护功能更加明显,Windows 10 周年 ...
- grep与egrep
当只有一个匹配条件时:egrep pattern file等价于grep -E pattern file 例如: 当多个匹配条件时,只能用egrep -e pattern1 -e pattern2 - ...
- 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码
加入OpenStack社区 https://launchpad.net/,注册用户(597092663@qq.com/Admin@123) 修改个人信息,配置SSH keys.OpenPGP keys ...
- 【架构】docker环境搭建mysql主从
序 本文主要研究怎么在docker上搭建mysql的主从.因为在单机搭建mysql多实例然后再配主从,感觉太痛苦了,环境各有不同,配置各不大相 同,从网上找搭建方法,试了半天也没成功,最后也没耐心调试 ...