为什么 SQL 事务没有得到回滚
Why SQL transaction not getting Rollback
如果某些 类 的注册总和超过 50,我正在尝试回滚事务。出于某种原因,即使我的 if 语句等于 true(课程总和为 60)这仍然最终删除了课程。
有什么想法吗?
BEGIN TRANSACTION T1
DELETE FROM Course WHERE Term = 'C'
IF (SELECT SUM(Enrollment) FROM Course WHERE Term = 'C') > 50
BEGIN;
THROW 50002, 'Total Enrollment Greater Than 50... Rolling Back Transaction...', 1;
ROLLBACK TRANSACTION T1;
END;
COMMIT TRANSACTION T1
为什么要在检查条件之前执行删除查询?
如果您从 Course
table 条件满足 Term = 'C'
的地方删除记录,那么 SELECT 查询 IF (SELECT SUM(Enrollment) FROM Course WHERE Term = 'C') > 50
永远不会满足并且不会回滚。
如果某些 类 的注册总和超过 50,我正在尝试回滚事务。出于某种原因,即使我的 if 语句等于 true(课程总和为 60)这仍然最终删除了课程。
有什么想法吗?
BEGIN TRANSACTION T1
DELETE FROM Course WHERE Term = 'C'
IF (SELECT SUM(Enrollment) FROM Course WHERE Term = 'C') > 50
BEGIN;
THROW 50002, 'Total Enrollment Greater Than 50... Rolling Back Transaction...', 1;
ROLLBACK TRANSACTION T1;
END;
COMMIT TRANSACTION T1
为什么要在检查条件之前执行删除查询?
如果您从 Course
table 条件满足 Term = 'C'
的地方删除记录,那么 SELECT 查询 IF (SELECT SUM(Enrollment) FROM Course WHERE Term = 'C') > 50
永远不会满足并且不会回滚。