关于使用游标更新数据和Case语句进行更新的实现过程
对学号是1的成绩进行判断,如果低于60则加20分,介于60~80,加10分,其余则不变
--游标的更新操作
DECLARE E1cursor cursor /* 声明游标,默认为FORWARD_ONLY游标 */
FOR SELECT score FROM SC where s#=1
for update /*更新*/
declare @score int
OPEN E1cursor /* 打开游标 */
FETCH NEXT from E1cursor into @score /* 读取第1行数据*/
WHILE @@FETCH_STATUS = 0 /* 用WHILE循环控制游标活动 */
BEGIN
update SC
set score=
case
when @score< 60 then score+20
when @score>=60 and @score<80 then score+10
else score
END
where current of E1cursor /* 当前游标的数据,不加这个where会更新所有表数据 */
FETCH NEXT from E1cursor into @score /* 在循环体内将读取其余行数据 */
END
CLOSE E1cursor /* 关闭游标 */
DEALLOCATE E1cursor /* 删除游标 */
--case 语句实现相同的效果
update dbo.sc
set score=
case
when score< 60 then score+20
when score>=60 and score<80 then score+10
else score
end
where s#=1