sp_executesql介绍和使用 转

转自http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.html

 

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/ijunxiong/articles/2525925.html

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

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

相关文章

linux多网卡udp组播收不到数,UDP组播,完成端口,双网卡收不到数据?帮帮忙

当前位置:我的异常网 网络通信 UDP组播,完成端口,双网卡收不到数据?帮帮忙UDP组播,完成端口,双网卡收不到数据?帮帮忙www.myexceptions.net 网友分享于:2013-04-13 浏览:848次UDP…

DllMain详解

1 DLL的进入/退出函数 1.1 DllMain简介 跟exe有个main或者WinMain入口函数一样,DLL也有一个入口函数,就是DllMain。以“DllMain”为关键字,来看看MSDN帮助文档怎么介绍这个函数的。 The DllMain function is an optional method of entr…

linux 视频学习

Linux 系统管理员要求对系统进行管理,备份等操作,linux程序员需要掌握c,c,java,php,jsp等 Linux平台上的开发,包括vi,gcc,gdb,make,jdk,tomcat,mysql… 书籍介绍:鸟哥LINUX私房菜,LINUX编程从入门到精通,li…

linux安装tensorflow教程,真正从零开始,TensorFlow详细安装入门图文教程!

在正式开始之前我想说:一定要注意窗口给出的提示(英文)。在实际操作中可能会碰到各种各样的问题,但常见的问题其实都可以根据它的报错信息找到原因,只要上网搜一搜相应的信息就能解决,甚至它自己就会给出解决的建议。如果你发现你…

引路蜂地图API:Gis.Navigation包定义

本包提供了路口到路口实时导航API,从地图服务器返回的路径信息含有文字和路径的地理坐标信息,类NavigationEngine根据路径和当前坐标实现实时导航。它内部含用三个工作线程: Location Monitor 实时监视当前位置坐标是否偏离路径,如…

ubuntu下安装opensips

1. 下载opensips1.8版本,并解压到 "/usr/local/src" 目录下 ;2. 安装必要的软件包,apt-get install flex bison libncurses-dev3. 进入opensips源码目录,make menuconfig出现opensips的配置界面后1) 选择"Configur…

linux 修改Db2主机名,修改DB2服务器的主机名

环境:产品:DB2 UDB平台:AIX,Solaris,HP-UX,Linux,Windows版本:V8 V9.1V9.5为了修改服务器的主机名,我们可以在DB2数据库服务器上执行以下步骤来实现:1) 停止DB2管理服务器…

用OpenMP加速你的程序[转]

最近在看多核编程。简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核 CPU的强大功能,于是多核编程应运而生。按照我的理解,多核编程可以认为是对多线程…

错误./hello: error while loading shared libraries: libQtGui.so.4: cannot open shared object file:

之前一直想在ARM 上跑qt,但都出现错误: ./hello: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory 这主要是ARM 上的运行环境设置不当: 我用的是飞凌的6410 环境变量设…

linux 指令引用变量,Linux之变量引用与命令替换

在bash脚本编写中,我们时常需要引用变量与替换命令,为规范操作,现对其做简单的总结说明。引用引用就是指将字符串用引用符号括起来,以防止特殊字符被shell脚本解释为其他意义。引用时屏蔽特殊字符的特殊意义,而将其解释…

有些垃圾网站转载都不会

有时会看到我的文章被转载,只要保留作者信息和原文链接,并且忠实于原文都是很欢迎的。这里的忠实原文应该是最基本的了吧,转载嘛,最简单的也就是拷贝粘贴吧,可发现有些垃圾网站,连拷贝粘贴都做不好&#xf…

移植tslib到开发板及部分问题解决

qt的tslib的具体移植步骤和过程就不多讲了,我说说我按照手册移植好tslib后在开发板运行提示的错误以及我的解决方法,当然每个人的提示可能一样,解决方法就不一样,我也是个初学者,所以方法仅供大家参考!问题…

Content Provider 基础 之URI

Keywords: content provider, URIContent Provider这个东西在Android平台上是最常用的共享数据的方法(似乎应用程序之间共享数据也只有这种方法吧,待求证)。虽然常用,但是这个东 西要理解透彻还是要先掌握一些基础的。URI就是Cont…

linux shell 原理,linux下shell的工作原理

linux下shell的工作原理2009-12-8 10:19:53 出处:https://www.yqdown.comshell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省运用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特…

解决SerMyAdmin无法登陆的问题

1. 首先确认默认的用户名和密码,因为每个版本的SerMyAdmin的默认用户名密码可能不同,根据 《Building Telephony Systems with OpenSIPS 1.6》这本书上所说的SerMyAdmin的用户名和密码是 adminsetup和secret。但是从我的SerMyAdmin安装包里的MySql数据…

oracle.cmd

--更改列顺序 SELECT * FROM ALL_OBJECTS WHERE OWNER TDDJ AND OBJECT_NAMELSZD_JZDZB AND OBJECT_TYPETABLE--54529 SELECT OBJ#,COL#,NAME FROM SYS.COL$ WHERE OBJ# 57689; UPDATE SYS.COL$ SET COL# 9 WHERE OBJ# 57689 AND NAME XMBM; UPDATE SYS.COL$ SET COL# 7 WHE…

Linux部署动态网页,linux构建动态WEB服务器安装篇

linux构建动态WEB服务器安装篇发布时间:2008-09-18 08:50:01 作者:佚名 我要评论基本配置安装web服务器:httpd-2.X.X先优化吧根据CPU设置变量#export CFLAGS”-O2 -marchpentium4 -pipe” && CXXFLAGS$CFLAGS“-march”选项表示为特定的cpu…

sip事务与对话

一个事务通常由一个请求开始,由一个响应码(a response code)结束。VIA头域中的branch参数用来标识一个事务。 对话可以是开始于一个INVITE事务,结束于一个BYE事务。一个对话由FROM,TO和CALL-ID头域的结合所…

[转]Win7 系统安装VS2008没反应 点击安装一闪就没有反应 .

原文地址:http://blog.csdn.net/mingjie_520/article/details/6757960 Win7 系统上用虚拟光驱安装 VS2008 没反应,安装不启解决方案VS2008 ISO境像文件,解开来安装的话,也没有问题,不过真的很慢,解出又占空…

apt-get的更新源

1、先备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表,有备无患嘛.) 2、修改更新源 sudo gedit /etc/apt/sources.list (打开源列表文件) 3、修改 deb http://mirrors.sohu.com…