2012-07-14 62 views
2

Transact-SQL中,什么是封闭之间的“开始交易”和“提交事务”SQL事务不回滚

我注意到不同的动作的目的是,当一个例外的中间被抛出函数它不回滚事务。 如果发生错误,如何回滚事务?

回答

2

使用try和catch进行正确错误处理的最佳方法。然后在基于错误的catch子句中执行动作,如回滚等。

但是,如果您不想更改代码,请在执行代码之前指定以下内容。

set xact_abort on 

这将导致transaction.But最好soltuion的自动回退将赶上并妥善处理错误。

+0

谢谢!任何想法为什么它不是在SQL Server中的默认行为? 听起来合乎逻辑,如果我在交易中,您必须全部或全部运行。 – Martin 2012-07-14 15:32:17

+0

是的。它对我来说听起来很合理,但它不是那样。也许是由于一些历史原因左右。 – 2012-07-14 15:34:42

+0

@Martin,因为默认行为是遵循sql标准。 – Hogan 2012-07-14 16:34:44