У меня есть таблица, которая выглядит примерно так:
AccountID, ItemID
1, 100
1, 200
2, 300
У меня есть процедура, которая принимает параметр значения таблицы, который обновляет элементы, связанные с учетной записью. Мы передадим что-то вроде следующего:
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
На основании переданных данных я ожидаю, что он добавит 2 новые записи в таблицу, что он и делает.
Я хочу, чтобы чтобы иметь предложение WHEN NOT MATCHED BY SOURCE, которое удалит элементы для указанной учетной записи , которые не совпадают.
Например, если я передаю
AccountID, ItemID
1, 100
1, 400
, то я хочу, чтобы он удалил запись, имеющую 1, 200; но оставьте ВСЕ остальные.
Если я просто сделаю:
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
, тогда будут удалены все записи для учетных записей, на которые нет ссылок (например: идентификаторы учетных записей 2 и 3).
Как я могу это сделать?
Спасибо,