游标和事务(例题).doc
文本预览下载声明
游标的应用
利用所学知识,结合示例分析如何创建、使用游标。
【例12-7】创建游标,并读取游标的数据。显示学生表(tblStudents)的信息。
USE CJMS --使用数据库CJMS
DECLARE ST_cursor SCROLL CURSOR --声明游标名
FOR SELECT * FROM tblStudents --标准游标
--FOR READ ONLY 只读游标
--FOR UPDATE 更新游标
OPEN ST_cursor --打开游标
FETCH FIRST FROM ST_cursor --返回游标中的第一行
FETCH NEXT FROM ST_cursor --返回游标中的当前记录的下一行
FETCH LAST FROM ST_cursor --返回游标中的最后行
FETCH PRIOR FROM ST_cursor --返回游标中的最前行
FETCH ABSOLUTE 2 FROM ST_cursor --返回游标中的第二行
FETCH RELATIVE 2 FROM ST_cursor --返回游标中的当前位置起向后第二行
CLOSE ST_cursor --关闭游标
DEALLOCATE ST_cursor --释放游标
执行该SQL语句,显示如图12-1所示效果。
图12-1游标的基本操作
【例12-8】利用游标更新数据,首先查看tblStudents表中的每一行,将Classes等于‘电子0801’的记录的Department改为‘电子工程系’。
USE CJMS --使用数据库CJMS
DECLARE @studentId nchar(10),@name nchar(10),@sex nchar(2), @classes nchar(50),@Departments nchar(50)
DECLARE edit_cursor CURSOR --声明游标名
FOR SELECT StudentID,Sname,Sex,Classes,Department FROM tblStudents --标准游标
--FOR READ ONLY 只读游标
FOR UPDATE --更新游标
OPEN edit_cursor --打开游标
FETCH NEXT FROM edit_cursor INTO @studentId,@name,@sex,@classes,@Departments --从游标中提取第一行
WHILE @@FETCH_STATUS=0
BEGIN
IF @classes =电子0801
UPDATE tblStudents SET Department=电子工程系
WHERE CURRENT OF edit_cursor
FETCH NEXT FROM edit_cursor INTO @studentId,@name,@sex,@classes,@Departments --从游标中提取下一行
END
CLOSE edit_cursor --关闭游标
DEALLOCATE edit_cursor --释放游标
运行该SQL代码,显示如图12-2所示的效果。
图12-2 利用游标更新数据
【例12-9】利用游标判断记录是否存在,查找tblStudents表中StudentID等于‘S200820005’的记录是否存在。
USE CJMS
DECLARE SER_CURSOR CURSOR
FOR SELECT * FROM tblStudents WHERE StudentIDOPEN SER_cursor
FETCH NEXT FROM SER_CURSOR
IF @@FETCH_STATUS =0
PRINT 该记录存在
ELSE
PRINT 该记录不存在
CLOSE SER_cursor
DEALLOCATE SER_cursor
运行该SQL代码,显示如图12-3所示的效果。
图12-3利用游标判断记录是否存在
事务的应用
【例12-10】在成绩管理系统中删除课程信息表(tblCourses)中“操作系统(C8030268)”这门课程,将学生课程成绩表(tblScore)中的“操作系统”的课程号(C8030268)改为“计算机操作系统”的课程号(C8030268)。
BEGIN TRANSACTION
显示全部