曾经一位朋友问我这样一个问题:怎样在查询出来的结果集中增加一个新列(有规律)?
如:数据库中的结构和数据如下: (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语句来实现上面的效果:
SQL语句查询结果集中的动态修改案例(临时表+游标)--定义参数
SQL语句查询结果集中的动态修改案例(临时表+游标)
declare @i int
SQL语句查询结果集中的动态修改案例(临时表+游标)
declare @name varchar(50)
SQL语句查询结果集中的动态修改案例(临时表+游标)
declare @age int
SQL语句查询结果集中的动态修改案例(临时表+游标)
SQL语句查询结果集中的动态修改案例(临时表+游标)
--声明一个游标
SQL语句查询结果集中的动态修改案例(临时表+游标)
declare c_people cursor
SQL语句查询结果集中的动态修改案例(临时表+游标)
for select * from people
SQL语句查询结果集中的动态修改案例(临时表+游标)
SQL语句查询结果集中的动态修改案例(临时表+游标)
--打开游标
SQL语句查询结果集中的动态修改案例(临时表+游标)
open c_people
SQL语句查询结果集中的动态修改案例(临时表+游标)
SQL语句查询结果集中的动态修改案例(临时表+游标)
--创建一个临时表
SQL语句查询结果集中的动态修改案例(临时表+游标)
create table #mypeople
SQL语句查询结果集中的动态修改案例(临时表+游标)(Id 
int,
SQL语句查询结果集中的动态修改案例(临时表+游标)Name 
varchar(50),
SQL语句查询结果集中的动态修改案例(临时表+游标)Age 
int)
SQL语句查询结果集中的动态修改案例(临时表+游标)
SQL语句查询结果集中的动态修改案例(临时表+游标)
set @i=1
SQL语句查询结果集中的动态修改案例(临时表+游标)
--读取数据
SQL语句查询结果集中的动态修改案例(临时表+游标)
fetch next from c_people into @name,@age
SQL语句查询结果集中的动态修改案例(临时表+游标)
while @@fetch_status=0
SQL语句查询结果集中的动态修改案例(临时表+游标)
begin
SQL语句查询结果集中的动态修改案例(临时表+游标)
--动态的增加新的一列到临时表
SQL语句查询结果集中的动态修改案例(临时表+游标)
insert into #mypeople
SQL语句查询结果集中的动态修改案例(临时表+游标)
values(@i,@name,@age)
SQL语句查询结果集中的动态修改案例(临时表+游标)
set @i=@i+1
SQL语句查询结果集中的动态修改案例(临时表+游标)
fetch next from c_people into @name,@age
SQL语句查询结果集中的动态修改案例(临时表+游标)
end
SQL语句查询结果集中的动态修改案例(临时表+游标)
--关闭游标
SQL语句查询结果集中的动态修改案例(临时表+游标)
close c_people
SQL语句查询结果集中的动态修改案例(临时表+游标)
--删除游标
SQL语句查询结果集中的动态修改案例(临时表+游标)
deallocate c_people
SQL语句查询结果集中的动态修改案例(临时表+游标)
--查询临时表
SQL语句查询结果集中的动态修改案例(临时表+游标)
select * from #mypeople
SQL语句查询结果集中的动态修改案例(临时表+游标)
--删除临时表
SQL语句查询结果集中的动态修改案例(临时表+游标)
drop table #mypeople

以上是我想到的实现方法。当然看来还是比较复杂的。如果有什么简单的方案。希望朋友们能及时的提出。分享知识是我最大的快乐。

相关文章: