文章目录
游标的使用分为5步:
1、声明游标
2、打开游标
3、读取游标中的数据
4、关闭游标
5、释放游标
容易出错的地方:
1、while里面写begin、end
2、更新值的时候用set或select
1、计算没有选课的学生人数
涉及到的表:student、sc
--1、声明游标
declare num_cursor cursor
for
select sno
from student
for read only
--2、打开游标
open num_cursor
--声明变量
declare @sno char(20), @num int
select @num = 0
--3、读取游标中的数据
fetch next from num_cursor
into @sno
while @@FETCH_STATUS = 0
begin
if not exists(select* from sc where Sno = @sno)
select @num = @num + 1
fetch next from num_cursor
into @sno
end
--打印未选课的学生人数
select @num
--4、关闭游标
close num_cursor
--5、释放游标
deallocate num_cursor
效果:
2、打印出每个科目的选课人数
涉及到的表:course、score
--1、声明游标
declare cno_cursor cursor
for
select cno
from course
for read only
--2、打开游标
open cno_cursor
--声明变量
declare @cno char(20), @num int
select @num = 0
--3、读取游标中的数据
fetch next from cno_cursor
into @cno
while @@FETCH_STATUS = 0
begin
select @num = COUNT(*) from Score where cno = @cno
--打印当前科目的人数
print convert(char(5), @cno) + ':' + convert(char(1), @num)
fetch next from cno_cursor
into @cno
end
--4、关闭游标
close cno_cursor
--5、释放游标
deallocate cno_cursor
效果:
3、根据学生成绩计算统计各个等级的人数
涉及到的表:sc
--声明游标
declare grade_cursor cursor
for
select grade
from sc
for read only
--打开游标
open grade_cursor
declare @grade int, @a int, @b int, @c int, @d int, @e int
select @a = 0, @b = 0, @c = 0, @d = 0, @e = 0
--读取游标中的数据
fetch next from grade_cursor
into @grade
while @@FETCH_STATUS = 0
begin
if @grade is null or @grade < 60
select @e = @e + 1
else
if @grade < 70
select @d = @d + 1
else
if @grade < 80
select @c = @c + 1
else
if @grade < 90
select @b = @b + 1
else
select @a = @a + 1
fetch next from grade_cursor
into @grade
end
select @a, @b, @c, @d, @e
--关闭游标
close grade_cursor
--释放游标
deallocate grade_cursor
4、根据员工工资计算其个人所得税,3000元为起征点,超出3000元的部分按照10%的比例征收个人所得税
涉及到的表:salary_table
--声明游标
declare salary_cursor cursor
for
select cno, salary
from salary_table
for read only
--打开游标
open salary_cursor
declare @cno char(10), @salary int, @tax int
--读取游标中的数据
fetch next from salary_cursor
into @cno, @salary
while @@FETCH_STATUS = 0
begin
if @salary <= 3000
select @tax = 0
else
select @tax = (@salary - 3000) * 0.1
update salary_table set tax = @tax where cno = @cno
fetch next from salary_cursor
into @cno, @salary
end
--关闭游标
close salary_cursor
--释放游标
deallocate salary_cursor