我们在应用程序中通过SqlCommand在SQL Server数据库上执行SELECT
查询来获取一些数据列表。我们没有在SqlCommand上显式设置事务,而只是将它传递给SqlConnection并运行它。是否会在未指定任何事务时SQL Server将启动并使用默认IsolationLevel为ReadCommitted
的默认事务?
答案 0 :(得分:6)
SQL会为您的语句隐式创建一个事务,并且在语句完成时提交此事务。此事务的隔离级别将是当前隔离级别,默认为READ COMMITTED。某些语句会覆盖当前的隔离级别并强制执行READ COMMITTED(例如RECEIVE)。
如果您的SqlCommand执行批处理(更多语句),那么访问表的每个语句都将创建自己的事务。
通过更改SET IMPLICIT_TRANSACTION ON来控制默认autocommit of transactions。
有关详细信息,请参阅Controlling Transactions。
答案 1 :(得分:3)
SQL Server可以在没有显式事务的情况下愉快地工作。但是,我相信它基本上是读取提交的(当然,除非您在查询对象中添加额外的提示,例如UPDLOCK
/ NOLOCK
)。您可以通过以下方式对此进行调查:
DBCC USEROPTIONS
显示(其中包括):
isolation level read committed