获取动态SQL的返回结果
1. 介绍说明
有时候在执行存储过程后,需要获取存储过程返回的列表,然后进行相应操作的情况,或者执行动态语句,获取返回结果的情况,通过EXEC ,sp_executesql可以实现该功能。
网上也有很多相关的读取方式,这里做个总结,方便以后查阅使用
2. 建表测试脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 执行动态语句返回结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 执行动态语句获取返回值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库