【MSSql2000】游标

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 行)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值