【MSSql2000】游标

来源:互联网 发布:python frozenset 编辑:程序博客网 时间:2024/05/19 05:06
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 #StuScoredeclare @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--取值成功,循环开始begindeclare 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--取值成功,循环开始beginset @scoreInfo=@scoreInfo+@scoreName+':'+@score+' '--将取出的值循环赋给@scoreInfofetch from scoreCursor into @scoreName,@score--取游标第二条记录--print @scoreInfoend--循环结束insert into #StuScore(StuName,Details) values(@stuName,@scoreInfo)--第一条记录组合完毕,插入表#StuScore当中close scoreCursor--关闭游标2deallocate scoreCursor--删除游标引用2set @scoreInfo=''--清空@scoreInfo以去除残留的上一次组合的记录fetch from stuCursor into @stuID,@stuName--取出游标第二条记录end--循环结束close stuCursor--关闭游标1deallocate stuCursor--删除游标引用1goselect * from #StuScoreselect * from UserInfoselect * from ScoreInfoexecute 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          12           数学                                                 90          13           语文                                                 80          24           英语                                                 80          25           历史                                                 80          26           数学                                                 80          27           物理                                                 90          1(所影响的行数为 7 行)