execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql 
sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的, 如: 
exec sp_executesql @sql, N'@count int out,@id varchar(20)', @cou out 
,@id 
@sql为拼成的动态sql 
N'@count int out,@id varchar(20)'为拼成的动态sql内的参数列表 
@cou out,@id为为动态sql内参数列表提供值的外部参数列表

那么它们之间有什么区别呢?

1,它们之间最大的区别是嵌入式的参数,如下面一个语句 
declare @sql nvarchar(2000) 
declare @id varchar(20) 
set @id='1' 
set @sql='select count(*) from emp where id=' + @id 
exec @sql 
我想把得到的count(*)传出来,用传统的exec是不好办到的,但是用sp_executesql则很容易就办到了: 
declare @sql nvarchar(2000) 
declare @cou int 
declare @id varchar(20) 
set @id='1' 
set @sql='select @count=count(*) from emp where id=@id' 
exec sp_executesql @sql, N'@count int out,@id varchar(20)', @cou out 
,@id 
print @cou 
2.性能 
可以看到,如果用exec,由于每次传入的@id不一样,所以每次生成的@sql就不一样,这样每执行一次Sql2005就必须重新将要执行的动态Sql重新编译一次 
但是sp_executesql则不一样,由于将数值参数化,要执行的动态Sql永远不会变化,只是传入的参数的值在变化,那每次执行的时候就秒用重新编译,速度自然快多了哈!

注意: 
1.sp_executesql要求动态Sql和动态Sql参数列表必须是Nvarchar,比如上个例子的@sql,N'@count int out,@id varchar(20)'我记得在sql2005中Varchar也可以的,但是我打了Sp3补丁后就不行了,必须为Nvarchar 
2.动态Sql的参数列表与外部提供值的参数列表顺序必需一致,如: 
N'@count int out,@id varchar(20)', @cou out,@id 
@count 对应 @cou,@id对应@id 
如果不一致,必须显式标明,如: 
N'@count int out,@id varchar(20)', @id=@id, @count=@cou out 
3.动态SQl的参数列表与外部提供参数的参数列表参数名可以同名

最新文章

  1. cobbler安装、部署、测试
  2. CSS学习点滴
  3. [GraphQL] Use Arguments in a GraphQL Query
  4. abstract和接口
  5. BLUEZ测试报告
  6. 后Hadoop时代的大数据架构(转)
  7. CSS渲染速度改善的十个方法与建议
  8. How to bind to data when the DataContext is not inherited【项目】
  9. 用函数生成select选择框
  10. 平衡搜索树(一) AVL树
  11. Ajax基础知识(一)
  12. HDU-2031-进制转换
  13. 【转载】Linux Cache Mechanism Summary(undone)
  14. iOS进阶之如何进行 HTTP Mock(转载)
  15. Asp.net core Identity + identity server + angular 学习笔记 (第三篇)
  16. CentOS 7 yum nginx MySQL PHP7 简易环境搭建(精)
  17. 软件工程实践_Task1
  18. react学习笔记(二)编写第一个react组件
  19. Spring加载properties文件的两种方式
  20. FileStream常用的属性和方法:

热门文章

  1. Struts2的创建Web项目入门
  2. STL-空间配置器(allocator)
  3. 转自:http://blog.sina.com.cn/s/blog_86e874d30101e3d8.html(谢谢原文作者),Win7下安装CentOS 6.5双系统
  4. Oracle数据库之PL/SQL程序设计简介
  5. javascript将form表单中的元素值封装成json格式
  6. JavaScript中的memorizing技术
  7. WDCP一些常用的一健安装包可选安装组件
  8. 《python基础教程》笔记之 抽象
  9. 复杂事件处理引擎—Esper入门
  10. [LeetCode 111] - 二叉树的最小深度 (Minimum Depth of Binary Tree)