Из пользовательского интерфейса я передаю данные в хранимую процедуру. Тип этого параметра — определяемое пользователем поле таблицы со следующей структурой
Personkey int
ComponentKey varchar
Эти данные должны попасть в таблицу, а данные, которые существуют в таблице, но не в таблице данных, должны быть удалены.
Пример данных таблицы
PersonKey ComponentKey
123 A1
456 B9
И моя таблица данных имеет 2 строки, одну совпадающую строку и одну новую строку
Пример данных
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 все еще находится в таблице.