-- 在存储过程中使用游标修改字段的值
-- 演示:使用游标的过程
-- =============================================
-- 打开数据库
-- =============================================
USE Papala
GO
-- =============================================
-- 删除存储过程
-- =============================================
IF Object_ID('usp_UseCursor') IS NOT NULL
DROp PROCEDURE usp_UseCursor
GO
-- =============================================
-- 新建存储过程
-- =============================================
CREATE PROCEDURE usp_UseCursor
AS
-- 创建一个表SC_ADD,表结构与SC相同
IF Object_ID('SC_ADD') IS NOT NULL
DROP TABLE SC_ADD
-- 声明变量
DECLARE @Sno CHAr(5), @Cno CHAr(1), @Grade INT
SELECT * INTO SC_ADD FROM SC WHERe Sno=@Sno and Cno=@Cno
--1. 声明游标,与插入表相关联
DECLARE curTemp CURSOR FOR
SELECt Sno, Cno, Grade FROM SC
--2. 打开游标
OPEN curTemp
--3. 从游标中读取下一个记录
FETCH NEXT FROM curTemp INTO @Sno, @Cno, @Grade
--4. 根据全局变量@@FETCH_STATUS,
-- 判断是否从游标中取得了正确的数据值
WHILE @@FETCH_STATUS=0
BEGIN
--4.1 使用读进来的变量值,做任何事情
IF @Grade <= 60
INSERT INTO SC_ADD VALUES(@Sno, @Cno, @Grade + 20);
ELSE
IF @Grade <= 85
INSERT INTO SC_ADD VALUES(@Sno, @Cno, @Grade + 10);
ELSE
INSERT INTO SC_ADD VALUES(@Sno, @Cno, @Grade + 5);
--4.2 从游标中读取下一个记录
FETCH NEXT FROM curTemp INTO @Sno, @Cno, @Grade
END
--5. 关闭游标
CLOSE curTemp
--6. 释放游标所占资源
DEALLOCATE curTemp
GO
-- =============================================
-- 测试和运行存储过程
-- =============================================
-- 调用存储过程
EXECUTE usp_UseCursor
-- 显示两个数据表的内容
SELECt * FROM SC
SELECt * FROM SC_ADD
GO
最后的结果不是我想要,
改了好几个地方还是不行,
希望有人能指教一下!