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
如果第一个删除语句失败会发生什么?是否会执行第二个和第三个删除语句?该示例没有任何错误处理,如果发生异常,它会保留一个打开的事务,还是SQL Server会自动回滚事务?打开交易=锁定的资源,对吧?是否需要ROLLBACK TRANSACTION?
我决定是否必须将TRY ... CATCH应用于使用事务的存储过程。
我知道关于,但想知道没有它会发生什么。
以下是我在文档中发现 - 控制事务(数据库引擎):
如果某个错误阻止交易顺利完成,SQL Server会自动回滚事务,并释放该持有的所有资源交易
但是我在其他文章中读到自动回滚未被触发。
是的,使用try ... catch。 – Ben 2012-07-10 13:40:46