sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的,

如: exec sp_executesql @sql, N'@item_name nvarchar(100) out,@id nvarchar(20)',   @item_name out,@id

参数说明:

@sql为拼成的动态sql

N'@item_name nvarchar(100) out,@id nvarchar(20)' 为拼成的动态sql内的参数列表

@name out,@id 为动态sql内参数列表提供值的外部参数列表

执行动态SQL时,Exec与 sp_executesql 之间的区别:

1、它们之间最大的区别是嵌入式的参数,如下面一个语句

declare @sql nvarchar(2000)

declare @id varchar(20)

set @id='888' set @sql='select item_name from t_item where id=' + @id

exec @sql

想把得到的item_name传出来,用传统的exec是不好办到的,

但是用sp_executesql则很容易就办到了:

declare @sql nvarchar(2000)

declare @item_name nvarchar(100)

declare @id nvarchar(20)

set @id='888'

set @sql='select @item_name=item_name  from t_item where id=@id'

exec sp_executesql

@sql,

N'@item_name nvarchar(100) out,@id nvarchar(20)',

@item_name out,@id

2、性能  可以看到,如果用exec,由于每次传入的@id不一样,所以每次生成的@sql就不一样,这样每执行一次Sql2005就必须重新将要执行的动态Sql重新编译一次,  但是sp_executesql则不一样,由于将数值参数化,要执行的动态Sql永远不会变化,只是传入的参数的值在变化,那每次执行的时候就不用重新编译,更节约时间!

另外,特别要注意的是:

1、sp_executesql要求动态Sql和动态Sql参数列表必须是Nvarchar

2、动态Sql的参数列表与外部提供值的参数列表顺序必需一致,

如: N'@item_name nvarchar(100) out,@id nvarchar(20)', @item_name out,@id

@item_name 对应@item_name ,@id对应@id

如果不一致,必须显式标明,

如: N'@item_name nvarchar(100) out,@id nvarchar(20)', @id=@id, @item_name =@item_name out

3、动态SQl的参数列表与外部提供参数的参数列表中的参数名可以同名。

动态SQL语句之sp_executesql的使用的更多相关文章

  1. 动态sql语句基本语法--Exec与Exec sp_executesql 的区别

    http://www.cnblogs.com/goody9807/archive/2010/10/19/1855697.html 动态sql语句基本语法 1   :普通SQL语句可以用Exec执行   ...

  2. 用sp_executesql执行动态SQL语句及获得返回值

    过去我执行拼凑出来的动态SQL语句,都直接使用EXEC @sql 的方式.有好几次,都看到有资料说,应该尽量使用 sp_executesql. 究其原因,是因为仅仅参数不同的情况下,sp_execut ...

  3. IBatis.net动态SQL语句

    在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数. 一.条件查询 1.传递单个参数 如根据Id查询: <select id=&quo ...

  4. 存储过程中执行动态Sql语句

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...

  5. IBatis.net动态SQL语句(六)

    在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数. 一.条件查询 1.传递单个参数 如根据Id查询: <select id=&quo ...

  6. [SQL]动态sql语句基本语法

    动态sql语句基本语法 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_ex ...

  7. 动态sql语句

    当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句,个人觉得用得比较多的地方就是执行搜索查询的SQL语句.对于搜索,可能要根据搜索条件判断来动态执行SQL语句. 在S ...

  8. 处理动态SQL语句的参数

    原文:处理动态SQL语句的参数 经常对SQL进行开发,写动态的SQL语句,是少之不了的,但是在使用动态语句中,常是因为有动态的参数的出现.参考下面代码示例: 正因为有了标记1的动态条件代码,而让SQL ...

  9. MySQL基础----动态SQL语句

    尊重原创:http://blog.csdn.net/abc19900828/article/details/39501643   动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 eg: ...

随机推荐

  1. java获取汉字拼音首字母 --转载

    在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.Unsupp ...

  2. JS回调函数全解析教程

    转自:http://blog.csdn.net/lulei9876/article/details/8494337 自学jQuery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速g ...

  3. jQuery和AngularJS的区别小分析

    最近一直在研究angularjs,最大的感受就是它和之前的jQuery以及基于jQuery的各种库设计理念完全不同,如果不能认识到这点而对于之前做jQuery开发的程序员,去直接学习angularjs ...

  4. android 教程实例系列

    用户界面部分学起来还真是无处下手哇,总不能一个控件发一篇文吧,略有点费时间啊...这个难道不是边用边学才给力吗..所以我打算从最实用的Button开始下手. 先贴几个链接,好东西: android用户 ...

  5. iOS第三方Api及常用框架总结

    iOS常用框架汇总: SVProgressHUD:产生覆盖层,禁止某种操作 SDWebImage: 专业下载图片框架 AFN:网络数据请求框架 MJExtension,模型对象之间互转 第三方分享第三 ...

  6. C# 先说IEnumerable,我们每天用的foreach你真的懂它吗?

    原文: http://www.cnblogs.com/zhaopei/p/5769782.html

  7. 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

    EL应用      自定义一个标签,实现两个字符串的相加 1回顾      1.1servlet生命周期           init(ServletConfig)           service ...

  8. centos yum安装saltstack

    1.导入安装源 centos5 rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm cen ...

  9. GridView点击行触发SelectedIndexChanged事件

    1.在<% @Page ...... %>指令中添加 EnableEventValidation="false" 2.在RowDataBound事件中添加 protec ...

  10. ZeroMQ接口函数之 :zmq_strerror - 获取ZMQ错误描述字符串

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_strerror zmq_strerror(3) ØMQ Manual - ØMQ/4.1.0 Name zmq_ ...