4

我有这个交易:

BEGIN TRAN;
Update Job set JobTitle = 'wonderfullivin' where JobId = 1271;
Update Job set LastTransactionDate = null where JobId = 1271;
COMMIT;

其中第二条语句必须失败,因为 LastTransactionDate 设置为 NOT NULL。但是,当我查看事务日志时,我看到事务已提交。它不应该因为其中一个查询失败而中止吗?

4

1 回答 1

6

不。

您需要使用SET XACT_ABORT ON来获得您显然期望的行为或添加一些错误处理,并且仅在未发生错误时提交或回滚。

SQL Server 中的错误可能会中止语句、范围、批处理或连接。

在这种情况下,错误只是中止语句,然后继续执行下一条语句。

有关这方面的更多信息,请参阅SQL 2000 中的错误处理

于 2013-04-04T09:10:27.803 回答