为什么 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 永远不会满足并且不会回滚。