这个问题在这里已经有了答案:
SQL Server - transactions roll back on error?
(5 个回答)
8年前关闭。
我有这个交易:
BEGIN TRAN;
Update Job set JobTitle = 'wonderfullivin' where JobId = 1271;
Update Job set LastTransactionDate = null where JobId = 1271;
COMMIT;
其中第二个语句必须失败,因为 LastTransactionDate 设置为 NOT NULL。
但是,当我查看事务日志时,我看到事务已提交。
不应该因为其中一个查询失败而中止吗?
最佳答案
不。
您需要使用 SET XACT_ABORT ON
获得您显然期望的行为或添加一些错误处理,并且仅在没有发生错误或否则回滚时才提交。
SQL Server 中的错误可能会中止语句、作用域、批处理或连接。
在这种情况下,错误只是中止语句,然后继续执行下一条语句。
见 Error Handling in SQL 2000了解更多。
关于sql - 为什么即使更新语句失败,此 SQL Server 事务仍会提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15806936/