这个代码哪里出问题了呢?
在游标那块,好像不起作用哈。
--使用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
执行后,事务倒是执行了,但是游标那块没有。不知道错在哪里,求解答···
在游标那块,好像不起作用哈。
--使用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
执行后,事务倒是执行了,但是游标那块没有。不知道错在哪里,求解答···
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