次のデータを含むテーブルがあるとします。
Id Value
1 | A
2 | B
3 | C
このテーブルの値を値のコレクションと同期する必要があります。コレクションにない行を削除し、ある行を追加して、一致する行をそのままにしておきたいと思います。
この値のコレクションが与えられた場合:
C,D,E
操作後、テーブルに次のものが含まれていると予想されます。
Id Value
3 | C
4 | D
5 | E
複数のクエリを必要とする明らかなソリューションのほとんどを認識しています。私が探しているのは、より効率的な解決策です。何とかここで MERGE ステートメントを使用できますか?
編集- コレクション値は C# コレクション (List<string>) にあり、.NET で標準の SqlConnection/SqlCommand を使用してクエリを実行しています。
これは、値の削除を処理するために私が考えたものです。しかし、これを作成するには少し文字列を連結する必要があるため、嫌われるかもしれません。
DELETE FROM [MyTable]
WHERE [Value] NOT IN ('C','D','E')
しかし、値を追加するには、コレクション内の値ごとに複数の IF NOT EXISTS THEN INSERT クエリ ステートメントを作成する必要があるようです。