使用游标遍历sc表,将学号为“1001”(自拟)的学生的所有课程成绩加5分。
时间: 2024-06-09 14:05:59 浏览: 245
在不使用CURSOR的情况下遍历MSSQL表
假设学生表为`student`,成绩表为`score`,学生表和成绩表通过学号连接。可以使用以下 SQL 语句实现:
```sql
DECLARE @sno CHAR(4)
SET @sno = '1001'
DECLARE cursor_score CURSOR FOR
SELECT sno, cno, score
FROM score
WHERE sno = @sno
DECLARE @sno_cursor CHAR(4)
DECLARE @cno_cursor CHAR(4)
DECLARE @score_cursor INT
OPEN cursor_score
FETCH NEXT FROM cursor_score INTO @sno_cursor, @cno_cursor, @score_cursor
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE score
SET score = score + 5
WHERE sno = @sno_cursor AND cno = @cno_cursor
FETCH NEXT FROM cursor_score INTO @sno_cursor, @cno_cursor, @score_cursor
END
CLOSE cursor_score
DEALLOCATE cursor_score
```
解释:
1. 首先定义一个变量 `@sno` 存储需要修改成绩的学生学号。
2. 使用 `DECLARE cursor_score CURSOR FOR` 定义一个游标,查询该学生在成绩表中的所有记录。
3. 使用 `OPEN cursor_score` 打开游标,使用 `FETCH NEXT FROM cursor_score INTO` 获取游标中的记录,并将记录的学号、课程号和成绩分别赋值给对应的变量。
4. 使用 `WHILE @@FETCH_STATUS = 0` 判断游标是否遍历完所有记录,若未遍历完则执行 `UPDATE` 语句,将该学生在该课程的成绩加上5分。
5. 使用 `CLOSE cursor_score` 关闭游标,使用 `DEALLOCATE cursor_score` 释放游标占用的资源。
阅读全文