У меня есть таблица, которая выглядит примерно так:
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).
Как я могу это сделать?
Спасибо