私のプロセス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
ですが、可能かどうか知りたいです。