这个代码哪里出问题了呢?
在游标那块,好像不起作用哈。
--使用liuyuNB数据库
USE liuyuNB
GOIF OBJECT_ID ('pro') IS NOT NULL
DROP PROCEDURE pro
GOCREATE PROCEDURE pro
AS
BEGIN
--变量声明
DECLARE @xuehao   nvarchar(20) 
DECLARE @chengji  float
DECLARE @政治面貌 nvarchar(100) 
DECLARE @性别     nvarchar(10)SELECT @xuehao=学生.学号
FROM 学生 INNER JOIN 成绩 
ON 学生.学号 <>成绩.学号
SET @chengji=60--声明游标
DECLARE cur CURSOR FOR 
SELECT 性别,政治面貌
FROM 学生
FOR UPDATE  OF 性别,政治面貌
--打开游标
OPEN cur
--获取游标的第一行
FETCH NEXT FROM cur into @性别,@政治面貌
/*循环获取游标中的行*/
WHILE @@FETCH_STATUS=0
BEGIN
   IF  @性别='女'
   UPDATE 学生
   SET 政治面貌='党员'
   WHERE CURRENT OF ur
   FETCH NEXT FROM cur into @政治面貌,@性别
END
CLOSE cur
DEALLOCATE cur--使用事务
BEGIN TRANSACTION 
DECLARE @error INT 
INSERT INTO 成绩
(学号,课程号,成绩)
VALUES (@xuehao,20030203,@chengji)
SELECT @error=@@ERROR
IF @error=0 --成功,提交事务
BEGIN
COMMIT TRANSACTION 
END 
ELSE -- 有错误发生,回滚事务 
BEGIN
PRINT '------------------------------------------'
PRINT '有错误发生,事务将回滚'
ROLLBACK TRANSACTION
END
ENDGO
执行后,事务倒是执行了,但是游标那块没有。不知道错在哪里,求解答···

解决方案 »

  1.   

    DECLARE cur CURSOR FOR 
    SELECT 性别,政治面貌
    FROM 学生
    FOR UPDATE  OF 性别,政治面貌
    --打开游标
    OPEN cur
    --获取游标的第一行
    FETCH NEXT FROM cur into @性别,@政治面貌
    /*循环获取游标中的行*/
    WHILE @@FETCH_STATUS=0
        BEGIN
           IF  @性别='女'
           UPDATE 学生
           SET 政治面貌='党员'
           WHERE CURRENT OF cur   --ur应该是cur
           FETCH NEXT FROM cur into @政治面貌,@性别
        END
    CLOSE cur
    DEALLOCATE cur