SQL Server 中,对结果集及游标的使用[总结]
一、对结果集使用的解决办法
如何在存储过程中使用另一个存储过程的结果集,或者对动态SQL语句的执行结果再次使用,可以使用下面这样的语句:
INSERT INTO table_name EXEC procedure_name @parameters_var
使用代码如下:
--1 创建一个临时表#tmp,表结构与目标存储过程procedure_name的返回结果集兼容(兼容即可,不必相同)。 create table #tmp( [columns_list] ) --2.1 执行存储过程,并将存储过程的返回结果集插入临时表。 insert into #tmp exec procedure_name @parameters_var --2.2 对于动态sql语句的执行如下(如果直接通过exec执行动态sql语句,sql语句有4k的长度限制。) insert into #tmp exec dbo.sp_executesql @querystring_var --3 现在可以使用(过滤,更改或检索)#tmp了。 if exists(select * from #tmp) begin --执行分支1 end else begin --执行分支2 end --4 最后清除临时表。 drop table #tmp
思路2:创建一个函数返回需要的查询结果集,然后在存储过程中当做table使用即可。
二、对游标的使用尝试
下面是使用 SQL Server 游标的一个示例。首先,创建测试环境:
create table #tmp( ID int ,UserName varchar(12) ) GO insert into #tmp values(1,'aaaa'); insert into #tmp values(2,'bbbb'); insert into #tmp values(3,'aabb'); insert into #tmp values(4,'bbaa'); GO select * from #tmp GO
使用代码如下:
alter procedure Demo as begin declare @tmpID int,@tmpName varchar(12); begin try -- 注意:有order by不能对select 语句使用括号 declare cr cursor for select ID,UserName from #tmp order by ID; open cr; fetch next from cr into @tmpID,@tmpName; -- @@fetch_status 返回当前打开的游标的 FETCH 语句的状态 while(@@fetch_status=0) begin print convert(varchar(6),@tmpID) + @tmpName; fetch next from cr into @tmpID,@tmpName; --读取下一条数据 if(@tmpName = 'aabb') goto userGO; end; userGO: print '自定义GOTO语句跳转'; close cr; -- 关闭游标 deallocate cr; -- 释放游标 end try begin catch close cr; -- 关闭游标 deallocate cr; -- 释放游标 print '异常处理!' end catch end; exec Demo
参考 MSDN 资源:http://msdn.microsoft.com/zh-cn/library/ms180169.aspx
(完)
作者: XuGang 网名:钢钢 |
出处: http://xugang.cnblogs.com |
声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址! |
分类:
SQL Server
标签:
SQL
, SQL Server
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架