获取动态SQL的返回结果
1. 介绍说明
有时候在执行存储过程后,需要获取存储过程返回的列表,然后进行相应操作的情况,或者执行动态语句,获取返回结果的情况,通过EXEC ,sp_executesql可以实现该功能。
网上也有很多相关的读取方式,这里做个总结,方便以后查阅使用
2. 建表测试脚本
IF OBJECT_ID('tbScore') IS NOT NULL
DROP TABLE tbScore
GO
CREATE TABLE tbScore
(
姓名 VARCHAR(10) ,
课程 VARCHAR(10) ,
分数 INT,
日期 DATETIME
)
GO
INSERT INTO tbScore VALUES ( '张三', '语文', 74,GETDATE() )
INSERT INTO tbScore VALUES ( '张三', '物理', 93 ,GETDATE() )
INSERT INTO tbScore VALUES ( '李四', '语文', 74 ,GETDATE() )
INSERT INTO tbScore VALUES ( '李四', '数学', 84 ,GETDATE() )
INSERT INTO tbScore VALUES ( '李四', '物理', 94 ,GETDATE() )
GO
3. 例子演示
2.1 通过EXEC 执行动态语句返回结果
CREATE TABLE #tmpResult
(
姓名 VARCHAR(10) ,
课程 VARCHAR(10) ,
分数 INT,
日期 DATETIME
)
GO DECLARE @SQL1 VARCHAR(1000)
SET @SQL1 = 'SELECT [姓名],[课程],[分数],[日期] FROM tbScore' --将EXEC执行的结果写入临时表
INSERT INTO #tmpResult EXEC(@SQL1) SELECT * FROM #tmpResult
--清理临时表
IF OBJECT_ID('tempdb..#tmpResult') IS NOT NULL
BEGIN
DROP TABLE #tmpResult
END
2.2 通过sp_executesql 执行动态语句获取返回值
CREATE TABLE #tmpResult
(
姓名 VARCHAR(10) ,
课程 VARCHAR(10) ,
分数 INT,
日期 DATETIME
)
GO DECLARE @SQL2 NVARCHAR(1000)
DECLARE @Count INT
SET @Count = 0 --(1)获取单个返回值
SET @SQL2 = 'SELECT @RowNum = COUNT(0) FROM tbScore'
EXEC sp_executesql @SQL2,N'@RowNum INT OUTPUT',@Count OUTPUT
SELECT @Count --(2)获取列表返回值
DELETE FROM #tmpResult --先清空数据 SET @SQL2 = 'SELECT [姓名],[课程],[分数],[日期] FROM tbScore'
INSERT INTO #tmpResult EXEC sp_executesql @SQL2
SELECT * FROM #tmpResult --清理临时表
IF OBJECT_ID('tempdb..#tmpResult') IS NOT NULL
BEGIN
DROP TABLE #tmpResult
END
4. 参考资料
http://www.cnblogs.com/yinhaiming/articles/1544922.html
获取动态SQL的返回结果的更多相关文章
- 获取动态SQL查询语句返回值(sp_executesql)
在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可. 而今天的一个存储过程却需要获取动态SQL的查询结果. 需求描述:在某表中根据Id值 ...
- ORACLE中使用DBMS_SQL获取动态SQL执行结果中的列名和值
1.获取动态SQL中的列名及类型 DECLARE l_curid INTEGER; l_cnt NUMBER; l_desctab dbms_sql.desc_tab; l_sqltext ); BE ...
- sql server2008 获取动态sql的变量值
--通过SQL 字符串 查询 获取查出的值sp_executesql declare @QuerySql nvarchar(500),@uid int,@Ucode varchar(100);set ...
- sqlserver中sp_executesql使用实例(获取动态sql输出结果)
语法 sp_executesql [ @stmt = ] stmt [ {, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,. ...
- sql server 获取动态sql输出结果
不带输出结果 我们一般会这样写 例子:一个输出6位递增号码结果 ALTER proc GetCode ), ) as declare @sqlstring nvarchar(max) set @sql ...
- mysql 5.7.20 动态sql 传入参数
drop procedure test; delimiter ;; CREATE procedure test() -- 取动态sql的值 -- 目前只测试出,在 where 后面, 可以用 ?,类似 ...
- mysql 5.7.20 取得动态sql执行结果
drop procedure test; delimiter ;; CREATE procedure test() -- 取动态sql的值 begin ); ); set v_sqlcounts = ...
- Java-MyBatis:MyBatis 3 动态 SQL
ylbtech-Java-MyBatis:MyBatis 3 动态 SQL 1.返回顶部 1. 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架 ...
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
随机推荐
- Javascript(JS)对Cookie的读取、删除、写入操作帮助方法
var CookieUtils = { get: function (name) { var cookieName = encodeURIComponent(name) + '=', cookieSt ...
- Java中移位操作运算符的理解
java中的移位运算符有三种: 1. <<: 左移 2. >>: 右移 3. >>>: 无符号右移 使用方法:左移就是将左边的操作数在内存中的二进制数据左移指 ...
- WPF中的ControlTemplate(控件模板)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板) ...
- cdoj 80 Cube 水题
Cube Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/80 Descrip ...
- C#调用Excel VBA宏
近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...
- JS的加载方式---同步和异步
同步加载及异步加载,只有这两种方式. 动态加载是异步加载的方式之一. ajax加载也是异步加载.
- $(document).ready()使用讨论
<script language="JavaScript" type="text/javascript"> $(document).ready(fu ...
- 0c-40-ARC下多对象内存管理
1个人拥有1条狗. 问题1:人拥有狗作为成员变量,此时使用weak,释放过程是什么样? Person *p = [Person new]; Dog *d = [Dog new]; //设置人拥有dog ...
- 小凡的Linux主机与时间服务器同步记录
小凡的Linux主机与时间服务器同步记录 导读 我们新安装的Linux主机,如果没有做与互联网服务器时间同步的处理的话,当我们使用date命令的时候,我们就看不到当前的时间,只能看到过去的时间.在我们 ...
- Game: Map Design Considerations 游戏地图设计指南
依据前文伏击战场景手稿, 用Tile Studio "草草"制作出该场景的地图: 生成的C源码: #ifndef _open_war_1Gfx_c #define _open_wa ...