USE AdventureWorks;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 10;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 11;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 12;
GO
COMMIT TRANSACTION;
GO
如果第一个删除语句失败会发生什么?会执行第 2 和第 3 个删除语句吗?该示例没有任何错误处理,是否会在异常情况下保留打开的事务,还是 SQL Server 会自动回滚事务?开放交易=锁定资源,对吧?
我正在决定是否必须将 TRY...CATCH 应用于使用事务的存储过程。
我知道set xact_abort on
,但想知道没有它会发生什么。
这是我在 docs - Controlling Transactions (Database Engine) 中找到的内容:
如果错误阻止事务的成功完成,SQL Server 会自动回滚事务并释放事务占用的所有资源
但是我在其他帖子中读到不会触发自动回滚。