0

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 がまだ表にあることに注意してください。

4

1 に答える 1