sql - 为什么即使更新语句失败,此 SQL Server 事务仍会提交

标签 sql transactions

这个问题在这里已经有了答案:





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/

相关文章:

c# - 为同义词表创建字符变异算法

SQL DATEDIFF 不工作?

Android 事务或触发器?

transactions - Quarkus @Transactional 是否需要像 spring AOP 这样的公共(public)方法

javascript - 将 webSQL 结果存储到 var 以供其他函数使用?

javascript - 与内部另一个事务同步的WebSQL事务

php - SQL 选择用户

sql - 在 FROM 子句中创建一个大的虚拟表

sql - Sybase IQ - 如何在不换行的情况下显示存储过程?

php - 了解 pdo mysql 事务