私はレコードがすでに一時的なテーブルの上に存在するかどうかに応じて、挿入または更新を行うSPを呼び出すときに、私はMS SQL一時テーブルの更新に失敗
データ変更がシステム - に失敗した取得理由を説明するために何かを見つける傾けます影響を受けるレコードの開始時間が よりも前だったため、バージョン管理されたテーブル 'MYDB.dbo.TemporalExample'です。
どのような用量ですか?それはいくつかの時間が発生するように見えます、私はそのマルチスレッドコードと紺碧のSQLを実行しているので、同じテーブルに相互接続が好きではない場合一時的なもの?イムは、エンティティフレームワーク(最新バージョン)にもかかわらず行くが、私はそれがちょうどこの
create PROCEDURE mysp @ID bigint, @a FLOAT, @b NVARCHAR(10), @c DECIMAL(19, 4) AS SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SET NOCOUNT ON BEGIN TRY IF EXISTS (SELECT TOP 1 Id FROM my_Temporal_Table WITH (NOLOCK) WHERE id = @ID AND a = @a AND b = @b) BEGIN UPDATE my_Temporal_Table SET Id = @ID, a = @a, b = @b c = @c DateModified = GETUTCDATE() WHERE Id = @Id END ELSE BEGIN INSERT INTO my_Temporal_Table (Id, a, b, c, DateModified) VALUES (@ID, @a, @b, @c , GETUTCDATE()) END END TRY BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000), @ErrorSeverity INT, @ErrorState INT SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE() -- Use RAISERROR inside the CATCH block to return error -- information about the original error that caused -- execution to jump to the CATCH block. RAISERROR (@ErrorMessage, -- Message text. @ErrorSeverity, -- Severity. @ErrorState -- State. ) END CATCH
問題
私のSPの疑い更新 私の一時的なテーブル作成スクリプト:
CREATE TABLE [Temporal]( [TemporalId] [bigint] IDENTITY(1,1) NOT NULL, [Payment] [decimal](19, 4) NOT NULL, [DateModified] [datetime2](7) NOT NULL, [SysStartTime] [datetime2](7) GENERATED ALWAYS AS ROW START NOT NULL, [SysEndTime] [datetime2](7) GENERATED ALWAYS AS ROW END NOT NULL, CONSTRAINT [TemporalId] PRIMARY KEY CLUSTERED ([TemporalId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON), PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime]) )WITH( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [Car2].[TemporalHistory]) )
を誰かが説明できますどうして私はこの問題を、なぜ意味するのか、もっと重要なのはどのように修正することができるのでしょうか?
おかげ
なぜ一時テーブルを更新していますか – TheGameiswar
なぜ私はそれを更新しないのか分かりませんか?結局のところ、通常のテーブルです。私はhistoryテーブルを更新していません。それはMS docs [link](https://msdn.microsoft.com/en-gb/library/mt591019.aspx)によるものです。あなたのテーブルのデータを更新する必要があるときに使用する方法 –
ああ、それは私がそれがヒストリーテーブルだと思ったそれを得た – TheGameiswar