EXEC与sp_executesql的区别及应用

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的参数列表与外部提供参数的参数列表参数名可以同名

转载于:https://www.cnblogs.com/dwuge/p/5261243.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React封装一个组件弹出框

目录 前言 代码 简要 引用 效果 前言 我是歌谣 放弃很容易 但是坚持一定很酷 为了保证react代码的一个简洁性 最近开始封装组件, 直接上代码 因为都很简单的模式 这边直接进行讲解 代码 //取消机构和取消讲师的方法封装 //params visible控制弹框的一个现实和隐藏 import…

h264 Nalu 详解

From: http://blog.csdn.net/d_l_u_f/article/details/7260772 1.引言 H.264的主要目标: 1.高的视频压缩比 2.良好的网络亲和性 解决方案: VCL video coding layer 视频编码层 NAL network abstraction layer …

Pytorch项目(模型训练与优化),肺癌检测项目之六

数据优化方案 数据优化方案1:重复抽样 (1)对多数类的样本实施欠采样,减少多数类数量 (2)对少数类的样本实施过采样,增加少数类数量 数据优化方案2:数据增强 数据增强&#xff08…

Oracle 中文排序

按照拼音顺序(常用) ORDER BY nlssort(NAME, NLS_SORTSCHINESE_PINYIN_M) 按照部首顺序 ORDER BY nlssort(NAME, NLS_SORTSCHINESE_RADICAL_M) 按照笔画顺序 ORDER BY nlssort(NAME, NLS_SORTSCHINESE_STROKE_M) 转载于:https://www.cnblogs.com/xcxcxcxc/p/554…

mac苹果屏幕截图快捷键

From: http://blog.csdn.net/w88193363/article/details/12647233 一般在Mac上用Command-Shif-3/4来截图。注:Command苹果键 其实还有几个辅助键,来起到不同的截图功能…… 011)Command-Shift-3(适用于OS9,10.1X和10.2) 02将整…

【数据库】SQL查询强化篇

查询是数据库的基本应用之一,oracle中的SQL查询语法,一方面遵循了SQL标准,另一方面又有自己的独特之处。 从而使得oracle中的SQL查询功能更加强大。接下来将会涉及oracle中的SQL查询语句,包括: 基本查询:主…

[python3] pyton socket 同步通信举例

本文比较简单,适合入门用,作个笔记,方便日后抄写 一个服务端,一个客户端,而且是阻塞方式,一次只能接受一个客户端连接并通信噢。 客户端发送‘bye, 结束与服务端的通信,如果发送’shutdown&…

做中学

陈鹤琴提出了 “做中教,做中学,做中求进步。”这个方法论,突出了以儿童为学习主体的思想及一个“活”字,一个“做”字,使儿童处于主动学习的地位,体现了陈鹤琴先生的儿童观和教育观。也就是说,陈鹤琴先生认为孩子应该在…

学习进度02

第二周学习进度 这是第二周了,感觉上了软件工程好累啊,但是在累的过程中,也积累了不少东西,很值! 第二周所花时间(包括上课) 410 ..... 代码量(行) 18545行 博客量&#…

[python3.3]Python异步Socket编程【TCP】

参考: http://www.cnblogs.com/snailrun/p/3805188.html 异步网络据说能极大的提高网络server的连接速度,所以打算写一个专题,来学习和了解异步网络.因为Python有个非常出名的异步Lib:Twisted,所以就用Python来完成. OK,首先写一个pythone socket的server段,对开…

计算比尔盖茨財富的方法

比尔盖茨究竟有多富? 1、盖茨每秒赚250美元,即每天赚2000万美元。一年赚78亿美元。 2、假如盖茨掉了1000美元。他才懒得去捡,由于他去捡要花掉四秒钟,这一弯腰他已赚回1000美元; 3、美国的国家债务约56200亿美元&#…

React开发(259):react项目理解 ant design debug

react dva中利用select方法取出state中的数据 yield select(state> state.xxx)

第三周仿真作业

1.设计要求 结合本周学习的直流电机机械特性,用Modelica设计和仿真一个直流电机串电阻启动过程,具体要求如下: 1)电机工作在额定电压和额定磁通下,采用串三段或四段电阻启动,整个启动过程电枢电流中不能超过…

python 网络编程----非阻塞或异步编程

From: http://blog.chinaunix.net/uid-20730371-id-765038.html 非阻塞或异步编程例如,对于一个聊天室来说,因为有多个连接需要同时被处理,所以很显然,阻塞或同步的方法是不合适的,这就像买票只开了一个窗口&#xff0…

分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容

问题的产生 在写JS的过程中,为了调试我们常常会写很多 console.log、console.info、console.group、console.warn、console.error代码来查看JS的运行情况,但发布时又因为IE不支持console,又要去掉这些代码,一不小心就会出错。 本文…

React开发(269):事件的绑定-addEventListener

利用函数addEventListener(‘事件’,function (){})可以是同个元素执行多个程序 复制代码big.addEventListener(click,function(){ console.log("大"); },true) //在函数后面加true可以使这个div在捕捉阶段…