1

私のプロセスINSTEAD OF INSERTでは、レコードの新しい値を受け入れて新しいバージョンを作成するトリガーを作成する必要があります。例:

注:表の列は、ビジネス要件により常に変更されています。table to tableそのため、代わりにマージをサポートするソリューションがあればcolumn to column素晴らしいでしょう。

例テーブル

VersionID   |ID     |Value 1    |Value 2
1           |1      |abc        | 123

クエリの例

INSERT INTO ExampleTable (ID,[Value 1]) VALUES (1,'testabc')

結果のテーブル:

VersionID   |ID     |Value 1    |Value 2
1           |1      |abc        | 123
2           |1      |testabc    | 123

現時点では、次のようなものがあります。

 -- Get data
 SELECT TOP 1 * INTO #ExistingData FROM dbo.ExampleTableLatestVersionView
 WHERE  ID = @ID

 -- Merge incoming data
 MERGE #ExistingData AS target
 USING inserted as source
 ON (target.ID= source.ID)
 WHEN   MATCHED
    THEN UPDATE SET target.[Value 1] = source.[Value 1], 
                    target.[Value 2] = source.[Value 2];

-- And afterwards I do a new insert into version table

ここでの問題はNULL、テーブルの値insertedが上書きされ、最終的に次のようになることです。

VersionID   |ID     |Value 1    |Value 2
1           |1      |abc        | 123
2           |1      |testabc    | NULL

INSTEAD OF UPDATEを参照して以前の値を取得できるところをやろうと思っていたのVersionIDですが、可能かどうか知りたいです。

4

1 に答える 1