UI から、データテーブルをストアド プロシージャに渡します。そのパラメーターのタイプは、次の構造を持つユーザー定義のテーブル フィールドです。
Personkey int
ComponentKey varchar
このデータはテーブルに入れる必要があり、テーブルに存在するがデータテーブルにないデータは削除する必要があります。
テーブルデータの例
PersonKey ComponentKey
123 A1
456 B9
そして、私のデータテーブルには2つの行があり、1つの一致する行と1つの新しい行があります
データテーブル データの例
PersonKey ComponentKey
123 A1
786 Z6
その結果、456/B9 行を削除し、123/A1 行には何も起こらず、786/Z6 行を挿入する必要があります。
MERGE ステートメントを使用できると思いますが、その作成方法がわかりません。
WHEN NOT MATCHED 挿入を行う必要があることは理解していますが、削除部分はどこに入るのですか?
MERGE Components
USING @passedInData
ON PersonKey = DatatblPersonKey AND ComponentKey = DatatblComponentKey
WHEN MATCHED THEN
-- DO nothing...
WHEN NOT MATCHED
INSERT (PersonKey, ComponentKey) VALUES (DatatblPersonKey, DatatblComponentey);
編集:明確にするために、データテーブルには同じ人物キーの多くの行が含まれる可能性がありますが、コンポーネントキーは異なります。
データテーブル データの例
PersonKey ComponentKey
123 Z6
123 C5
テーブルデータの例
PersonKey ComponentKey
123 A1
456 B9
上記のデータテーブルを挿入した後の結果は
PersonKey ComponentKey
123 Z6
123 C5
456 B9
123/A1 が削除され、456/B9 がまだ表にあることに注意してください。