MERGE Запрос и удаление записей

У меня есть таблица, которая выглядит примерно так:

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).

Как я могу это сделать?

Спасибо,

28
задан Martin Smith 6 April 2015 в 10:29
поделиться