我刚刚意识到我根本不了解 .NET/SQL Server 事务的工作原理。我觉得我可能会在“没有愚蠢的问题这样的事情”上突破极限,但我阅读的所有文档都不容易理解。我将尝试以这样一种方式来表达这个问题,即答案几乎是肯定的/否定的。
如果我有一个在一台机器上运行的 .NET 进程有效地执行此操作(不是真正的代码):
For i as Integer = 0 to 100
Using TransactionScope
Using SqlClient.SqlConnection
'Executed using SqlClient.SqlCommand'
"DELETE from TABLE_A"
Thread.Sleep(5000)
"INSERT INTO TABLE_A (Col1) VALUES ('A')"
TransactionScope.Complete()
End Using
End Using
Next i
是否有任何事务/隔离级别配置会使“SELECT count(*) FROM TABLE_A”在从其他进程运行时始终返回“1”(即,即使没有行时有 5 秒的时间 block 在事务上下文中的表中)?
最佳答案
是的,您可以让其他进程看不到您在显示的事务中所做的更改。为此,您需要更改其他进程,而不是进行修改的进程。
打开快照隔离并对其他读取进程使用IsolationLevel.Snapshot
。他们将看到表格处于您进行任何修改之前的状态。他们不会阻止(等待)。
关于sql-server - 这种 .NET/SQL Server 事务场景是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12736388/