sag*_*gar 5 c# sql-server transaction-isolation isolation-level
我已在C#代码中将隔离级别设置为readcommitted,并且我正在调用存储过程,由于某种原因该过程正在超时。该存储过程没有任何set isolation level语句。
在SQL Server中,数据库级别的隔离级别是读取已提交的快照。
那么将使用哪个隔离级别?在SQL Server中定义的一个,还是在C#中定义的一个?
不存在“数据库隔离级别”这样的东西。您描述的是一个数据库选项,称为READ_COMMITTED_SNAPSHOT:
READ_COMMITTED_SNAPSHOT { ON | OFF } ON在数据库级别启用读提交快照选项。启用后,即使没有事务使用快照隔离,DML 语句也会开始生成行版本。启用此选项后,指定读已提交隔离级别的事务将使用行版本控制而不是锁定。
因此,当READ_COMMITTED_SNAPSHOT为 ON 时,指定读已提交隔离级别的事务将看到快照隔离级别。
重要的是要了解还有另一个数据库选项:也ALLOW_SNAPSHOT_ISOLATION必须将其设置为 ON 才能发生快照隔离。请参阅SQL Server 中的快照隔离。
如有疑问,您可以随时检查sys.dm_tran_current_transaction哪个列名为transaction_is_snapshot:
快照隔离状态。如果事务在快照隔离下启动,则该值为 1。否则,值为 0。
此外,真正的快照隔离级别与通过 READ_COMMITTED_SNAPSHOT 更改为快照的已提交读隔离之间存在细微差别。