インメモリ OLTP であるテーブルを更新しようとしています。同じ行を並行して更新しなければならないシナリオがあります。同じレコードの同時更新中に、報告されたエラーを下回っています。これが私の更新ステートメントのサンプルです。
ウィンドウ2で同時に以下のコマンドを実行する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
現在、報告されたエラーを下回っています。ただし、通常のテーブルでも同じことが機能し、2 番目のウィンドウは最初のウィンドウ トランザクションの完了を待機しています。メモリ最適化テーブルに対しても少なくとも同じ動作を設定するにはどうすればよいですか。
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 コールバック、オブジェクト状態) で