如果我在我调用的存储过程中定义事务,我是否应该在.NET代码中使用事务?

时间:2011-12-30 10:49:57

标签: asp.net sql

我猜测如果我在两个地方都这样做,那么交易管理就会出现“有限”的问题。

我认为我可以想到在应用程序级别进行事务处理的原因是业务特定逻辑,可能在sprocs中不可用(即在整理和计算从检索到的数据派生的内容或执行“业务规则的完整性 - 缺少更好的术语”可以强制回滚。

谢谢,

2 个答案:

答案 0 :(得分:2)

如果每个被调用层都知道现有交易,您可以在两个级别拥有交易。

因此,如果您希望重用存储过程,您可以了解从客户端代码启动的事务,另一个存储过程并且不执行任何begin / commit / rollback。

如果它没有检测到任何事务,则它可以自己开始/提交/回滚。

此行为很重要,因为SQL Server实际上没有嵌套或自治事务:因此,使每个存储过程安全,您不需要考虑它。

我在这里的答案中的模式将检测到一个交易并完成这个:
Nested stored procedures containing TRY CATCH ROLLBACK pattern?

答案 1 :(得分:0)

这样做是可以的。如果您在核心业务逻辑/服务之外使用存储过程,您仍然可能希望它们的事务安全。如果您的存储过程是一组操作的一部分,那么它将成为嵌套事务。