У меня есть таблица, которая выглядит примерно так:
AccountID, ItemID
1, 100
1, 200
2, 300
У меня есть proc, который принимает параметр значения таблицы, который обновляет элементы, связанные с учетной записью. Мы передадим что-то вроде следующего:
AccountID, ItemID
3, 100
3, 200
Прок выглядит примерно так:
procedure dbo.MyProc( @Items as dbo.ItemListTVP READONLY )
AS
BEGIN
MERGE INTO myTable as target
USING @Items
on (Items.AccountId = target.AccountId)
AND (Items.ItemId = target.ItemId)
WHEN NOT MATCHED BY TARGET THEN
INSERT (AccountId, ItemId)
VALUES (Items.AccountId, Items.ItemId)
;
END
На основе переданных данных я ожидаю, что он добавит две новые записи в таблицу, что и делает.
Я хочу иметь предложение WHEN NOT MATCHED BY SOURCE, которое удалит элементы для указанной учетной записи, которые не совпадают.
Например, если я передаю
AccountID, ItemID
1, 100
1, 400
Затем я хочу, чтобы он удалил запись, имеющую 1, 200; но оставить ВСЕ других.
Если я просто сделаю:
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
то он удалит все записи для учетных записей, не связанных (например: идентификаторы учетной записи 2 и 3).
Как я могу это сделать?
Спасибо,