【发布时间】:2012-07-10 00:01:10
【问题描述】:
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,但想知道没有它会发生什么。
这是我在文档中找到的 - 控制事务(数据库引擎):
如果错误导致事务无法成功完成,SQL Server 会自动回滚事务并释放事务占用的所有资源
但是我在其他帖子中读到不会触发自动回滚。
【问题讨论】: