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. ubuntu 下安装 cx_Oracle库

    1.下载3个zip包: 下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.htm ...

  2. Tensorflow 实现稠密输入数据的逻辑回归二分类

    首先 实现一个尽可能少调用tf.nn模块儿的,自己手写相关的function     import tensorflow as tf import numpy as np import melt_da ...

  3. 【基础知识】UML基础

    http://www.ibm.com/developerworks/cn/rational/r-uml/

  4. Web开发基本准则-55实录-缓存策略

    续上篇<Web开发基本准则-55实录-Web访问安全>. Web开发基本准则-55实录-缓存策略 郑昀 创建于2013年2月 郑昀 最后更新于2013年10月26日 提纲: Web访问安全 ...

  5. 注解:Hibernate双向N->N关联(两端都控制关联关系)

    Person与Address关联:双向N->N,[连接表必须有],两端都控制关联关系 #需要说明的是:如果程序希望某一端放弃控制关联关系,则可以在这一段的@ManyToMany注解中指定mapp ...

  6. list点击项高亮其他默认

    // 点击项颜色高亮,其他默认 if (position != lastPosition && onClickItemView != null) { TabMenu lastTabMe ...

  7. 动态添加LinearLayout的高度

    WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); int width ...

  8. psql-10权限和事务

    用户和角色 用户和角色在整个数据库实例中都是全局的;

  9. sprintf溢出的bug

    向printf.sprintf这种函数在编译时很难检查错误,所以程序员必须小心.比如我就遇到了这样的bug: void test() { ]; sprintf(t,"); } //执行spr ...

  10. BZOJ2087 : [Poi2010]Sheep

    一条边能连上当且仅当它没有经过任何点,并且两边的点都是偶数个. 枚举原点,通过极角排序求出哪些边是合法的,然后区间DP即可. 时间复杂度$O(nm\log m+n^3)$. #include<c ...