【发布时间】:2012-05-30 12:37:58
【问题描述】:
当 BEGIN TRANS - COMMIT TRANS 在一个 SP 中完成并在 TransactionScope 中执行多个 SP 并在完成范围之前引发错误时会发生什么。
所以伪代码如下
//Using TransactionScope() {
// executing SP1
// executing SP2
// executing SP3
// throw new Exception();
//}
SP2 包含如下代码。
// BEGIN TRANS
// Update Statement1
// Update Statement2
// Update Statement3
// COMMIT TRANS
如果我们假设事务在 SP2 中提交,会发生什么?
- 一切都会回滚
- SP2 中的 3 条语句被提交。其他所有内容都会回滚?
我不知道这是否重要,但以防万一,所有三个 SP 都使用一个连接对象执行,并且连接在两个 ExecuteNonQuery 语句之间关闭并再次打开。
【问题讨论】:
-
如果任何一个 SP 发生错误,事务将被回滚。如果 SP2 被提交,但 SP3 抛出错误,则不会发生更新,整个事务将回滚。
-
@praveen 你为什么不把它作为答案发布?
-
那是我的错误。无论如何,如果我的回答对你有任何帮助,我会更高兴
标签: sql-server sql-server-2008 transactions transactionscope