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)'

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/jianglingblog/p/9525358.html

sp_executesql介绍和使用相关推荐

  1. sp_executesql介绍和使用 转

    转自http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.html execute相信大家都用的用熟了,简写为exec,除了用来执行存储 ...

  2. sp_executesql

    sp_executesql的用法sp_executesql介绍和使用 示例一 declare @count int,@tableName nvarchar(50),@SQLString nvarcha ...

  3. SqlServer中存储过程中将Exec的执行结果赋值给变量输出

    原文 SqlServer中存储过程中将Exec的执行结果赋值给变量输出 背景: 遇到这样一种情况:动态向存储过程中传入表名和表的某些属性(这里用到的是主键ID),然后利用这两个变量查出一条数据的某些字 ...

  4. mysql函数 动态语句_自定义函数动态执行SQL语句

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...

  5. sqlserver 中EXEC和sp_executesql使用介绍

    sqlserver 中EXEC和sp_executesql使用介绍 MSSQL为我们提供了两种动态运行SQL语句的命令,各自是EXEC和sp_executesql;通常,sp_executesql则更 ...

  6. 第二十二节: 以SQLServer为例介绍数据库自有的锁机制(共享锁、更新锁、排它锁等)和事务隔离级别 :

    一. 基本概念 1.共享锁:(holdlock) (1). select的时候会自动加上共享锁,该条语句执行完,共享锁立即释放,与事务是否提交没有关系. (2). 显式通过添加(holdlock)来显 ...

  7. sql server注入_SQL注入:SQL Server中的介绍和预防方法

    sql server注入 A SQL injection attack is one of the most commonly used hacking techniques. It allows h ...

  8. 使用sp_executesql存储过程执行动态SQL查询

    The sp_executesql stored procedure is used to execute dynamic SQL queries in SQL Server. A dynamic S ...

  9. exec 与 exec sp_executesql 的用法及比较

    exec 与 exec sp_executesql  都可以用于执行动态sql.下面先介绍它们的用法,然后再对它们进行比较 (下面用到的数据库表来自SQLSERVER 的示例数据库 Adventure ...

最新文章

  1. 我圣贤为何发起第三方插件商店和桌面应用商店?
  2. 纯 CSS 实现三角形尖角箭头的实例
  3. css3动画:animation
  4. 【云计算】_8云视频与通信服务(完结)
  5. 十进制转十六进制_汇编语言 输入一位十六进制数,输出其十进制表示
  6. kali2.0安装搜狗输入法
  7. sphinx mysql存储引擎_基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计...
  8. Iceberg 在基于 Flink 的流式数据入库场景中的应用
  9. execl执行linux命令,execl执行Linux命令
  10. android java代码重启,如何在Android中重启服务?
  11. 如何修改vue打包的名字_教你如何修改Mac的电脑名字
  12. 【中级04】Java 虚拟机 Runtime Data Areas以及垃圾回收
  13. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_2 Mybatis中编写dao实现类的使用-保存操作...
  14. openlayers5学习笔记-map事件(moveend)
  15. 连接共享打印机0xc00000bcb
  16. taskctl跨调度服务依赖实现
  17. 大型网站技术架构思维导图
  18. 递归例题讲解 一本通1215:迷宫 答案解析
  19. 核磁共振三维重建(视频)
  20. 未能将文件 *** \bin\Release\**.dll 复制到 \obj\Release\Package\PackageTmp\bin\***.dll VS发布程序报错 解决办法

热门文章

  1. 生日快乐程序_别@官方了!云开发教你制作个性头像小程序,以后过节想加啥就加啥!...
  2. python数据库更新消息提醒_用Python实现校园通知更新提醒功能
  3. Oracle 11g安装图文攻略
  4. liferay如何debug
  5. Maven项目,项目上出现红叉,项目内没有报错,可以运行
  6. springboot+IntelliJ IDEA实现热部署
  7. 《leetcode》pascals-triangle(杨辉三角)
  8. java知识百科全书--强烈推荐
  9. 使用labelme制作自己的深度学习图像分割数据集
  10. 生命的力量:萝卜开花