我正在尝试更新内存中 OLTP 的表。在这种情况下,我们可能必须并行更新同一行。在同一记录的并发更新期间,我得到低于报告的错误。这是我的示例更新声明。
在 SQL 窗口 1 中同时在窗口 2 中执行以下命令,我正在执行第二个更新命令
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION
BEGIN TRY
UPDATE [TestInmemory] SET CreatedDate = GETDATE() WHERE Id = 112
WAITFOR DELAY '00:00:30'
COMMIT TRANSACTION
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE( )
ROLLBACK TRANSACTION
END CATCH
窗口 2:
UPDATE [TestInmemory] SET CreatedDate = GETDATE() WHERE Id = 112
现在我得到低于报告的错误。但同样适用于普通表,第二个窗口正在等待完成第一个窗口事务。我如何也为内存优化表设置至少相同的行为。
System.Data.SqlClient.SqlException (0x80131904):当前事务试图更新自该事务开始以来已更新的记录。交易被中止。该语句已终止。
在 System.Data.SqlClient.SqlCommand.<>c.b__126_0(任务1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask
2.InnerInvoke() 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态)