用sp_executesql执行动态SQL语句及获得返回值
来源:互联网 发布:女用情趣用品 知乎 编辑:程序博客网 时间:2024/05/29 17:11
过去我执行拼凑出来的动态SQL语句,都直接使用EXEC @sql 的方式。有好几次,都看到有资料说,应该尽量使用 sp_executesql。
究其原因,是因为仅仅参数不同的情况下,sp_executesql可以重用执行计划,这不就有跟存储过程一样的优势了吗?同时,sp_executesql还可以提供动态SQL语句执行的返回值,方便得很。
但sp_executesql的使用方式看上去比较复杂,一点都不像EXEC那样直观。
用法:
EXEC sp_executesql SQL语句,参数声明,参数
如
CREATE TABLE #tmp(t INT NOT NULL,it DECIMAL(18,4),pt DECIMAL(18,4));INSERT INTO #tmp(t,it,pt) VALUES(1,10.00,15.00);INSERT INTO #tmp(t,it,pt) VALUES(2,20.00,30.00);DECLARE @sql NVARCHAR(2000) = N'SELECT @it=it,@pt=pt FROM #tmp WHERE t=@tN;';DECLARE @Param NVARCHAR(500) = N'@tN INT,@it DECIMAL(18,4) OUTPUT,@pt DECIMAL(18,4) OUTPUT';DECLARE @tN INT,@it DECIMAL(18,4),@pt DECIMAL(18,4);SET @tN = 1;--@tN=@tN,第一个@tN是@Param里的声明,而第二个@tN则是外部的声明,其他类似EXEC sp_executesql @sql,@Param,@tN=@tN,@it=@it OUTPUT,@pt=@pt OUTPUT;SELECT @it,@pt;DROP TABLE #tmp;
为什么有返回值那么重要呢?我在不知道这个用法以前,如果需要捕捉动态SQL语句里的返回值,要借用表对象:
详见拙作:
http://blog.csdn.net/leftfist/article/details/12840785
declare @sql NVARCHAR(MAX) = N'SELECT @i,@j;';declare @paramdefine NVARCHAR(MAX) = N'@i INT,@j INT,@k INT=3';exec sp_executesql @sql,@paramdefine,@i=1,@j=2;
0 0
- 用sp_executesql执行动态SQL语句及获得返回值
- SqlServer动态执行SQL语句sp_executesql、Exec
- 用sp_executesql 来执行拼接的sql语句,并返回值
- Sql语句用变量 用exec sp_executesql 执行之
- 用sp_executesql执行设计期不确定的SQL语句
- 用sp_executesql执行期不确定的SQL语句
- SQLSERVER 动态执行SQL sp_executesql与EXEC
- SQLSERVER 动态执行SQL sp_executesql与EXEC
- SQLSERVER 动态执行SQL sp_executesql与EXEC
- 执行动态SQL,exec和exec sp_executesql
- sqlserver 动态sql执行execute和sp_executesql
- MSSQL 动态加载 SQL语句 (sp_executesql)
- mysql存储过程执行动态sql语句并返回值
- 返回动态SQL语句中执行结果值
- 关于SQL中 动态执行SQL语句并且获得动态SQL语句输出参数值的问题
- arcengine 执行sql获得返回值
- 动态语句exec与sp_executesql执行计划区别
- SQL SERVER 动态执行SQL -- sp_executesql与EXEC
- Oracle 优化器
- 【C++ STL学习之六】STL算法之for_each
- codeigniter源代码分析 -安全类 Security.php
- codeforces_#243 (Div.2)
- mybatis集成spring的事务管理
- 用sp_executesql执行动态SQL语句及获得返回值
- OpenStack、Xen、lxc 、kvm、qemu与Hadoop(Yarn),Mesos 与Spark,Hadoop
- LeetCode:Linked List Cycle--链表快慢指针实现求链表中位和查找链表中是否存在环
- SpringMVC配置文件
- hadoop--1 搭建伪分布式实验环境
- UVa 579 - ClockHands
- 【C++ STL学习之七】STL算法之find和find_if
- Linux_查看修改SWAP大小
- 利用Dreamweaver开发JSP的方法