Таким образом, вы должны квалифицировать строки TARGET с помощью переменной.

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

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

Основываясь на переданных данных, я ожидаю, что он добавит 2 новые записи в таблицу, что он и делает.

Я хочу иметь предложение WHEN NOT MATCHED BY SOURCE, которое будет удалять элементыдля указанного аккаунта это не соответствует.

Например, если я пройду

AccountID, ItemID
1, 100
1, 400

Затем я хочу удалить запись, имеющую 1, 200; но оставь ВСЕ другие.

Если я просто сделаю:

WHEN NOT MATCHED BY SOURCE THEN
  DELETE;

тогда он удалит все записи для учетных записей, на которые нет ссылок (т. е. идентификаторы учетных записей 2 и 3).

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

Спасибо,

Ответы на вопрос(4)

Ваш ответ на вопрос