if object_id('tempdb..#StuScore') is null
create table #StuScore (
[StuScoreID] [int]IDENTITY (1, 1) NOT NULL ,
[StuName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Details] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL
)
else DELETE FROM #StuScore
declare @stuID varchar(100)--嵌套游标查询条件,主键表的主键
declare @stuName varchar(100)--沿用原表(姓名),主键表字段姓名
declare @scoreName varchar(100)--需要组合的外键表的字段
declare @score varchar(100)--需要组合的外键表的字段
declare @scoreInfo varchar(100)--组合成的字段
declare stuCursor scroll cursor for select UserInfoID,UserName from UserInfo--游标1查询主键表
open stuCursor--打开游标
fetch from stuCursor into @stuID,@stuName--取出游标第一条记录
set @scoreInfo=''--用于循环赋值
while @@fetch_status=0--取值成功,循环开始
begin
declare scoreCursor scroll cursor for select ScoreName,Score from ScoreInfo where UserInfoID=@stuID--游标2条件查询外键表
open scoreCursor--打开游标
fetch from scoreCursor into @scoreName,@score--取出游标第一条记录
while @@fetch_status=0--取值成功,循环开始
begin
set @scoreInfo=@scoreInfo+@scoreName+':'+@score+' '--将取出的值循环赋给@scoreInfo
fetch from scoreCursor into @scoreName,@score--取游标第二条记录--print @scoreInfo
end--循环结束
insert into #StuScore(StuName,Details) values(@stuName,@scoreInfo)--第一条记录组合完毕,插入表#StuScore当中
close scoreCursor--关闭游标2
deallocate scoreCursor--删除游标引用2
set @scoreInfo=''--清空@scoreInfo以去除残留的上一次组合的记录
fetch from stuCursor into @stuID,@stuName--取出游标第二条记录
end--循环结束
close stuCursor--关闭游标1
deallocate stuCursor--删除游标引用1
go
select * from #StuScore
select * from UserInfo
select * from ScoreInfo
execute StudentScore
(所影响的行数为 1 行)
(所影响的行数为 1 行)
StuScoreID StuName Details
----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------
1 李四 语文:90 数学:90 物理:90
2 张三 语文:80 英语:80 历史:80 数学:80
(所影响的行数为 2 行)
UserInfoID UserName
----------- --------------------------------------------------
1 李四
2 张三
(所影响的行数为 2 行)
ScoreID ScoreName Score UserInfoID
----------- -------------------------------------------------- ----------- -----------
1 语文 90 1
2 数学 90 1
3 语文 80 2
4 英语 80 2
5 历史 80 2
6 数学 80 2
7 物理 90 1
(所影响的行数为 7 行)
【MSSql2000】游标
最新推荐文章于 2022-06-10 17:25:07 发布