普通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 ...
随机推荐
- 不错的linux下通用的java程序启动脚本
不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...
- iOS-AFN "Request failed: unacceptable content-type: text/plain"
今天使用AFN测试程序时,返回如下错误 这是由于AFN默认不支持http返回结果为"text/plain"这种类型所致. 解决办法: 找到AFN框架中的AFURLResponseS ...
- Log4Net日志记录两种方式
简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. log4net是Ap ...
- motto4
有时候,你不能太固执,因为这样子对你不利,应该懂得变通才行. 你要知道,语言是表达思想的工具.你不说,别人怎么知道你的思想呢?你又怎么了解他人的思想呢?
- Ubuntu无法关机解决办法
说明:如果不成功请参考一下文章最后的内容,也许会有帮助. 其实不止在ubuntu里面,fedora里面我也遇到了这个问题,就是电脑可以重启,但是不能直接关机,否则就一直停在关机界面,需手动关机.郁闷很 ...
- javascript模板方法模式
一:什么是模板方法模式: 模板方法模式由二部分组成,第一部分是抽象父类,第二部分是具体实现的子类,一般的情况下是抽象父类封装了子类的算法框架,包括实现一些公共方法及封装子类中所有方法的执行顺序,子类可 ...
- php用soap创建webservice
php提供了一个专门用于soap操作的扩展库,使用该扩展库后 可以直接在php中进行soap操作.下面将介绍soap的基本操作. 一.soap扩展的使用方法 php的soap扩展库通过soap协议实现 ...
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
一, 最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...
- PHP中冒号、endif、endwhile、endfor这些都是什么
我们经常在wordpress一类博客程序的模板里面看到很多奇怪的PHP语法,比如:<?php if(empty($GET_['a'])): ?><font color="r ...
- Nginx图片剪裁模块探究 http_image_filter_module
官方地址:http://nginx.org/en/docs/http/ngx_http_image_filter_module.html 煮酒品茶:前半部安装和官方说明,后半部分实践 #yum ins ...