CharlesChen's Technical Space

简单实用是我一直在软件开发追求的目标(I Focus on. Net technology, to make the greatest efforts to enjoy the best of life.)
Not the best, only better
随笔 - 135, 文章 - 0, 评论 - 547, 阅读 - 51万
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 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 31 1 2 3 4 5

SQL语句查询结果集中的动态修改案例(临时表+游标)

Posted on   Charles Chen  阅读(2941)  评论(12编辑  收藏  举报
     曾经一位朋友问我这样一个问题:怎样在查询出来的结果集中增加一个新列(有规律)?
如:数据库中的结构和数据如下: (tableName : People)
 Name           Age                                                                                                     
 changchang  20                                                  
 charles         23                                                   
 sunny          21     
 huangzhs     22                                                 
 dazu            65                                                   

现在通过SQL语句把查询的结果显示成:
Id       Name              Age
1       changchang       20
2       Charles             23
3       sunny               21
4      huangzhs           22
5       dazu                65

首先分析这道题目:(动态的增加新的一列(递增))
要在查询结果集中增加一个新列。而我们通过 select * from People 是没有ID这列的。
所以我们需要在查询出来的结果集中增加(一行一行增加).
实现要牵涉到的技术:
首先想到的是通过游标来实现(游标可以遍历结果集中的每一条记录)。
另外我们可以通过创建临时表或表变量来放增加新的列后的数据。
最后通过查询临时表就可以让查询结果中包含新增加的一列.
现在通过sql语句来实现上面的效果:
--定义参数
declare @i int
declare @name varchar(50)
declare @age int

--声明一个游标
declare c_people cursor
for select * from people

--打开游标
open c_people

--创建一个临时表
create table #mypeople
(Id 
int,
Name 
varchar(50),
Age 
int)

set @i=1
--读取数据
fetch next from c_people into @name,@age
while @@fetch_status=0
begin
--动态的增加新的一列到临时表
insert into #mypeople
values(@i,@name,@age)
set @i=@i+1
fetch next from c_people into @name,@age
end
--关闭游标
close c_people
--删除游标
deallocate c_people
--查询临时表
select * from #mypeople
--删除临时表
drop table #mypeople

以上是我想到的实现方法。当然看来还是比较复杂的。如果有什么简单的方案。希望朋友们能及时的提出。分享知识是我最大的快乐。
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示