获取动态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注解,然后, ...
随机推荐
- Failed to issue method call: Unit mysqld.service failed to load: No such file or directory.
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- radvd.conf RADVD配置文件内容部分解析
interface eth0{ AdvSendAdvert on; #启用路由器公告(RA)功能 MinRtrAdvInterval ; #每隔30-100秒间隔发送公告消息 MaxRtrAdvInt ...
- Mysql中使用树的设计
原来一直使用id与 parent_id结合的办法设计树,最近发现有些问题: 1.查询此结点下所有子结点的需求. 2.查询此结点上所有父结点的需求. 这些需求在oracle和sql server中可以使 ...
- 【转】Python字符编码详解
转自:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 1. 字符编码简介 1.1. ASCII ASCII(American S ...
- jQuery.FlexiGrid使用总结
经过对FlexiGrid的大量使用,及时不时琢磨下其代码,对她的脾性有了一定的了解,是该做总结的时候了. 一.FlexiGrid下载 1.原版代码 最近Paulo P. Marinas对FlexiGr ...
- Codeforces Round #310 (Div. 1) B. Case of Fugitive set
B. Case of Fugitive Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/555/p ...
- GLSL实现HDR Rendering 【转】
http://blog.csdn.net/a3070173/archive/2008/11/29/3408573.aspx HDR - 全称High dynamic rang,是目前流行的3D特效技术 ...
- oc-27-@property的参数
//01加强-10 @property .4前 ) @property + 手动实现 ) @property int age; + @synthesize age;//get和set方法的声明和实现都 ...
- /proc/sys/vm/ 内存参数
linux下proc里关于磁盘性能的参数 http://blog.csdn.net/eroswang/article/details/6126646 我们在磁盘写操作持续繁忙的服务器上曾经碰到一个特 ...
- 代码片段 - Golang 实现简单的 Web 服务器
------------------------------ 下面一段代码,实现了最简单的 Web 服务器: 编译环境: Linux Mint 18 Cinnamon 64-bit Golang 1. ...