0

我正在尝试更新内存中 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.ContinuationResultTaskFromResultTask2.InnerInvoke() 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态)

4

0 回答 0