隐式事务和显式事务在SQL Server 2008中有何区别?
TransactionScope的背景中发生了什么?我正在使用TransactionScope,但在SQL Server分析器中看不到“Begin transaction...”语句。
它是如何工作的?
隐式事务和显式事务在SQL Server 2008中有何区别?
TransactionScope的背景中发生了什么?我正在使用TransactionScope,但在SQL Server分析器中看不到“Begin transaction...”语句。
它是如何工作的?
基本上,在c#中将TransactionScope设置为Implicit时,它会调用SQL Server SET命令将连接设置为IMPLICIT_TRANSACTIONS模式。您执行的任何操作(使用第二个链接中列出的命令之一)都会开始一个事务,该事务保持打开状态直到发出提交。如果在连接结束时没有发出提交,则会执行隐式回滚。
这与OFF设置不同,后者也将每个语句放入一个事务 - 不同之处在于在OFF模式下(因此事务是显式的),每个事务(单个语句)立即提交。
隐式事务是自动提交的。事务没有开始或结束。
显式事务具有事务的开始、结束和回滚命令:Begin Transaction,Commit Transaction和Rollback Transaction。
在显式事务中,如果在其中发生错误,我们可以回滚到事务的开头,这在隐式事务中是不可能的。
SqlTransaction
- 在TransactionScope
内部使用的事务,仅对SQL Server 2000及更早版本发送T-SQL BEGIN TRANSACTION
命令。
对于SQL Server 2005及更高版本,TDS协议已扩展以允许客户端直接操作事务而无需发送BEGIN TRANSACTION
等命令。要在Profiler中查看这些内容,请选择“TM:Begin Tran starting”事件等。您可能需要选中“显示所有事件”复选框才能查看这些事件-它们位于“Transactions”类别下。
请参阅TDS协议文档中的Transaction Manager Request,Profiler文档中的TM: Begin Tran Starting Event Class以及.NET Reference Source中的SqlInternalTransaction.ExecuteTransactionYukon。
BEGIN TRANSACTION ...
,那么在implicit_transactions off
模式下,可以说交易是明确的,否则则称为 autocommit 模式。 - jlb