实验10.1 T-SQL程序设计逻辑
/1计算1~100所有能被3整除的个数和总和/
declare
@sum smallint,
@I smallint ,
@nums smallint
set @sum=0
set @I=1
set @nums=0
while(@I<=100)
begin
if(@I%3=0)
begin
set @sum=@sum+@I
set @nums=@nums+1
end
set @I=@I+1
end
print'总和是:'+str(@sum)
print'个数是:'+str(@nums)
运行结果:
select * from Student
学生表:
/2从学生表选取属性列,如果为男输出M,如果为女输出F/
use testbase2
select SNO as 学号,SN as 姓名,性别=
CASE SEX
when '男' then 'M'
when '女' then 'F'
end
from Student
实验10.2 面向复杂T-SQL程序设计
/从数据库testbase2查询所有同学选课成绩情况:姓名,课程名,成绩/
/要求:凡成绩为空输出“未考”,小于60输出 不及格 60~70分输出及格/
/要求:70~80分输出中 80~90输出 良好 90以上输出 优/
select SN as 姓名,Course.CN as 课程名,
成绩=
case
when Student.SCORE is null then '未考'
when Student.SCORE < 60 then '不及格'
when Student.SCORE >=60 and Student.SCORE<70 then '及格'
when Student.SCORE >=70 and Student.SCORE<80 then '中'
when Student.SCORE >=80 and Student.SCORE<90 then '良好'
when Student.SCORE >=90 then '优'
end
from SC,Student,Course
where Student.SNO=SC.SNO and Course.CNO=SC.CNO
order by Student.SNO,Course.CNO,Student.SCORE desc
go
开始的教师工资
/给教师增加工资/
/要求必须任2门以上课程且涨幅总收入分成3个级别,4000元以上涨300元/
/3000元以上涨200元,3000元以下涨100元,只任一门课程的涨50元。其他情况不变/
use testbase2
update Teacher set SAL = sal+
case
when Teacher.TNO IN(
select TC.CNO from Teacher,TC
where Teacher.TNO=tc.CNO and (SAL+comm)>=4000
GROUP by tc.CNO having COUNT(*)>=2
)then 300
when Teacher.TNO in(
select tc.CNO from Teacher,TC
where Teacher.TNO = tc.CNO and (SAL+COMM)>=3000 and (SAL+COMM)<4000
GROUP by tc.CNO having COUNT (*)>=2
)then 200
when Teacher.TNO in(
select tc.CNO from Teacher,TC
where Teacher.TNO = tc.CNO and (SAL+COMM)<3000
GROUP by tc.CNO having COUNT (*)>=2
)then 100
when Teacher.TNO in(
select tc.CNO from Teacher,TC
where Teacher.TNO = tc.CNO
GROUP by tc.CNO having COUNT (*)=1
)then 50
else 0
end
go
10.3 使用游标
1定义一个游标Cursor_Famale
要求:该游标返回所有女同学的基本信息,再有表中查找并显示牛莉的信息。
2创建一个存储过程Pro_C,返回一个包含所有选修数据库课程的嘘声基本信息的游标。利用该存储过程,通过学生姓名查找学生王一山是否选修了数据库课程,如果选修了,则给出其成绩。
Declare
@SNO char(6),
@SNAME char(8),
@SEX char(2),
@AGE tinyint,
@DEPT char(10)
declare Cursor_Famale cursor for select SNO,SNAME,SEX,AGE,DEPT FROM Student
open Cursor_Famale
fetch next from Cursor_Famale into @SNO,@SNAME,@SEX,@AGE,@DEPT
while @@fetch_status = 0
begin
if @SNAME='牛莉'
begin
print '找到牛莉的信息如下:'
print @SNO+' '+@SNAME+' '+@SEX+' '+convert(char(2),@AGE)+' '+@DEPT
break
end
fetch next from Cursor_Famale into @SNO,@SNAME,@SEX,@AGE,@DEPT
end
if @@fetch_status !=0 print'很抱歉,没有找到牛莉的信息!'
close Cursor_Famale
deallocate Cursor_Famale
如果没有找到用户名:
如果找到用户名:
/创建一个存储过程Pro_C,返回一个包含所有选修数据库课程的学生基本信息的游标/
/利用该存储过程,通过学生姓名查找王一山是否选修了数据库课程,如果选修了,给出其成绩/
/1创建存储过程Pro_C/
2/利用存储过程,通过姓名张一山查找是否选修了数据库课程,如果是,给出成绩/