我正在开发一个与数据库交互的.NET应用程序。在一个方法中,我开始一个SQL事务并修改table1
中的一些值,在我完成更改后(但仍未提交事务)我启动Threading.Thread
以更新值table2
使用table1
中的数据。
这个线程会读取修改后的值吗?或者它会在交易开始之前加载数据吗?
答案 0 :(得分:2)
这取决于第二个线程是否使用了启动事务的相同连接/会话。如果是,那么它可以看到在该交易期间到目前为止所做的更改。如果它是一个不同的连接,那么在提交之前它们将对这些更改视而不见。
答案 1 :(得分:2)
在第二个线程中使用事务的RepeatableRead
或ReadUncommitted
事务隔离级别将允许您从table1读取未提交的数据。
有关事务隔离级别的更多信息:
Set Transaction Isolation Level (Transact-SQL)
在读取和更新table2之前,如何确保将数据写入table1的问题不同,这取决于您的.NET应用程序实现。