设为首页 收藏本站
查看: 857|回复: 0

[经验分享] sql server 2000存储过程例子

[复制链接]

尚未签到

发表于 2016-11-2 07:45:28 | 显示全部楼层 |阅读模式
  
/****** Object:  Stored Procedure dbo.ChengJi    Script Date: 2005-11-10 11:28:53 ******/

CREATE PROCEDURE dbo.ChengJi  (@fClass_No varchar(20),@fTermNo varchar (10),@n int)
 AS
create table #temp
(
     fStu_Num varchar (20),
    fStu_Name varchar (20),
    fSex       varchar(2),
    fScores   varchar (8000),
    fAverage varchar(10),
    fNote       varchar(1) default '0'
)
--从学籍表T_xjStudent 中取得指定班级的所有学生存入#temp 中,以备后面使用
declare @StuNum varchar (20),@StuName varchar(20),@Sex varchar(2),@Scores varchar(8000),@fCNames varchar(200)
declare stu_cursor cursor for select distinct  fStudentNum ,fName,fSex  from T_xjStudent where fClassNum =@fClass_No-- and substring(fStudentNum,1,4)='1999'
Open stu_cursor 
    fetch next from stu_cursor into @StuNum,@StuName,@Sex
while @@fetch_status = 0
begin
    Insert into #temp (fStu_Num,fStu_Name,fSex,fScores) values(@StuNum,@StuName,@Sex,'')
    fetch next from stu_cursor into @StuNum,@StuName,@Sex
end
close stu_cursor
deallocate stu_cursor

--选择出一个学籍班的某一学期所有教学计划安排
declare @fCourseNum varchar (20),@fCourseName varchar(20)
declare @fScores varchar (8000)
declare Cou_cursor cursor for
    select   distinct PE.fCourse_No As 课程班号,CL.fCName_China As 课程
     from    T_jxPersonalElective PE ,T_xjStudent S ,T_jxCourseLibrary CL
    where  S.fStudentNum =PE.fStudentNum and S.fClassNum = @fClass_No and PE.fTermNo =@fTermNo and CL.fCourse_Num=Substring(PE.fCourse_No,2,4)
        /*select  TI.fCourse_No As 课程班号,CL.fCName_China As 课程
        from T_jxTeachImplement TI,T_jxCourseLibrary CL 
        Where TI.fClass_No=@fClass_No and CL.fCourse_Num =substring(TI.fCourse_No,2,4) and TI.fTermNo =@fTermNo */ --TI.fCourse_No'11313201'
Open Cou_cursor 
    fetch next from Cou_cursor into @fCourseNum,@fCourseName
    --set @fCNames = @fCNames +@fCourseName
while @@fetch_status = 0
begin

--选出每一个学籍班的所有学生一学期一门课程的成绩
    declare @SNum varchar(20),@SName varchar (20),@SS varchar(10),@fNote varchar(1),@EC  varchar(10)
    declare Score_cursor cursor for
        select     S.fStudentNum As 学号,S.fName As 姓名,ISNULL(PE.fScore1,0) As 成绩 ,EC.fCheatName2 As 考试情况
        from       T_xjStudent S,T_jxPersonalElective PE ,T_jxExamCheat EC
        where    S.fStudentNum = PE.fStudentNum and S.fClassNum =@fClass_No and PE.fCourse_No = @fCourseNum and PE.fTermNo = @fTermNo 
            and EC.fCheat_No = PE.fCheat -- @fCourseNum'11313201'
        Order By  S.fStudentNum,PE.fScore1
    Open Score_cursor 
        fetch next from Score_cursor into @SNum,@SName,@SS,@EC
    while @@fetch_status = 0
    begin
        set @Scores = (select fScores from #temp where fStu_Num =  @SNum and fStu_Name = @SName)
        set @fNote  =  (select fNote from #temp where fStu_Num =  @SNum and fStu_Name = @SName)
        if(cast(@SS As int)>=60 and @fNote='0' and @SS!='0')  -- @SS!='' and @SS!='NULL'  and
        Update #temp set fScores =( @Scores+ @SS+'         '),fNote = '0'  where fStu_Num =  @SNum and fStu_Name = @SName  
        else
        if(@SS =''  or  @SS = 'NULL'  or @SS='0')
        Update #temp set fScores =( @Scores+ @EC +'         ') ,fNote = '1'  where fStu_Num =  @SNum and fStu_Name = @SName--  
        else
        Update #temp set fScores =( @Scores+ @SS +'         ') ,fNote = '1'  where fStu_Num =  @SNum and fStu_Name = @SName  
        fetch next from Score_cursor into @SNum,@SName,@SS,@EC
    end
    close Score_cursor
    deallocate Score_cursor

    fetch next from Cou_cursor into @fCourseNum,@fCourseName
end
close Cou_cursor
deallocate Cou_cursor

--计算平均成绩
declare @fStudentNum varchar(20),@fName varchar(20),@Ave varchar (10)
declare Ave_cursor cursor for
    select S.fStudentNum As 学号,S.fName As 姓名,avg(PE.fScore1) As 平均成绩 
    from       T_xjStudent S,T_jxPersonalElective PE 
    where    S.fStudentNum = PE.fStudentNum and S.fClassNum =@fClass_No  and PE.fTermNo = @fTermNo    --  and  PE.fScore2 ='' and PE.fScore3 =''                                                                         --and PE.fCourse_No = '11313201'
    group by S.fStudentNum,S.fName

Open   Ave_cursor
    fetch next from  Ave_cursor into @fStudentNum,@fName ,@Ave
while @@fetch_status = 0
begin
    Update #temp set fAverage = @Ave where fStu_Num =  @fStudentNum and fStu_Name = @fName   
    fetch next from  Ave_cursor into @fStudentNum,@fName ,@Ave
end
close Ave_cursor 
deallocate Ave_cursor
if(@n !='' and  @n !=0)
begin
set ROWCOUNT @n
select   fStu_Num As 学号,fStu_Name As 姓名,fSex As 性别,fScores As 成绩 ,substring(fAverage,1,5)  As 平均成绩 from #temp  Where fNote ='0'
Order by  substring(fAverage,1,5)  DESC
set ROWCOUNT 0
end
else
select   fStu_Num As 学号,fStu_Name As 姓名,fScores As 成绩 ,substring(fAverage,1,5)  As 平均成绩 from #temp


GO

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294459-1-1.html 上篇帖子: sql server 中去除重复行 下篇帖子: SQL SERVER 修改列属性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表