はのは、私は複合主キーを持つテーブルがあるとしましょう:ソースで部分的に一致するターゲットでDELETEを指定したMERGE?
create table FooBar (
fooId int not null,
barId int not null,
status varchar(20) not null,
lastModified datetime not null,
constraint PK_FooBar primary key (fooId, barId)
);
は、今私は多分、このような何か特定のfooId
のためのいくつかの表形式のデータを持っている:
1, 1, 'ACTIVE'
1, 2, 'INACTIVE'
を...と私がしたいですこの表形式のデータを信頼できるとして扱い、fooId
1のみをとし、の一致しないレコードをすべてfooId
に削除しますが、すべてのレコードはすなわち、ではなく、1のみである。
1, 1, 'ACTIVE', ... (some date, not typing it out)
2, 1, 'ACTIVE', ...
1, 3, 'INACTIVE', ...
2, 2, 'INACTIVE'
私は上記の2つのデータセットでMERGE文を実行したい、とFooBar
に設定された結果のデータは、次のようになります。
たとえば、のはFooBar
表は、現在このデータを持っているとしましょう:
1, 1, 'ACTIVE', ...
2, 1, 'ACTIVE', ...
1, 2, 'INACTIVE', ...
2, 2, 'INACTIVE', ...
私は行1, 3, 'INACTIVE'
を削除したいでしょう、そして新しい修正タイムスタンプを更新する1, 1, 'ACTIVE'
行、および1, 2, 'INACTIVE'
行が挿入されるように。また、fooId
の2のレコードを変更しないことをお勧めします。
これは単一のステートメントで実行できますか?もしそうなら、どうですか?
通常、マージはターゲットに存在しないソースからの行を挿入し、ソースとターゲットの両方に存在する行を更新し、ソースと一致しない行を削除することもできます(これを調整してfoodId = 1にすることもできます)おそらくあなたはより良い答えを得るために、ソース、ターゲット、期待される結果のサンプルデータを提供するべきです。たぶん[このスレッド](https://stackoverflow.com/questions/7331725/how-to-delete-from-source-using-merge-command-in-sql-server-2008)が役立ちます。 –