Imran Khan Pathan Ответов: 3

Запрос слияния для удаления записи из целевой таблицы


Привет, друзья.

У меня есть следующий запрос слияния. У меня есть две таблицы в одной базе данных.

1. Инвентаризация как целевую таблицу и 2. INVENTORY_STAGE в качестве исходной таблицы.
MERGE INVENTORY AS D
USING INVENTORY_STAGE AS S
ON (D.CODE = S.CODE)
WHEN NOT MATCHED
    THEN INSERT(CODE,INV_DESCRIPTION,BVRVMODDATE) VALUES(S.CODE,S.INV_DESCRIPTION,S.BVRVMODDATE)
WHEN MATCHED AND (S.BVRVMODDATE <> D.BVRVMODDATE)
    THEN UPDATE
    SET CODE=S.CODE,INV_DESCRIPTION=S.INV_DESCRIPTION,BVRVMODDATE=S.BVRVMODDATE;


Приведенный выше запрос проверяет, совпадают ли данные со значением кода, то он обновляется в пункте назначения, в противном случае он вставляется в пункт назначения.

Мое требование заключается в том, что если данные не существуют в исходной таблице и существуют в целевой таблице, то запись должна быть удалена из целевой таблицы,

Где это будет изменение в приведенном выше запросе?
Уважение

Imrankhan

3 Ответов

Рейтинг:
2

André Kraak

Хотя читаю Слияние (Transact-SQL)[^] кажется, вы должны использовать WHEN NOT MATCHED BY SOURCE THEN.


Рейтинг:
0

Imran Khan Pathan

Я получаю следующую ошибку.

Действие типа "DELETE" не допускается в предложении "WHEN NOT MATCHED"
инструкция merge.

мой запрос выглядит следующим образом.

MERGE CUS2 AS TARGET
USING CUS1 AS SOURCE
ON (TARGET.CUSNUMBER = SOURCE.CUSNUMBER)
WHEN MATCHED 
    THEN UPDATE
    SET 
    CUSNUMBER = SOURCE.CUSNUMBER
WHEN NOT MATCHED BY TARGET THEN
    DELETE
WHEN NOT MATCHED 
    THEN INSERT(CUSNUMBER) VALUES(SOURCE.CUSNUMBER);


André Kraak

Пожалуйста, не публикуйте дополнения к вашему вопросу в качестве решения. Если вы хотите изменить свой вопрос, используйте кнопку улучшить вопрос.
Использование такого решения создаст у людей впечатление, что на ваш вопрос был дан ответ, и, возможно, они не посмотрят на него, в результате чего вы не получите ответа на свой вопрос.

Пожалуйста, переместите содержание этого решения на ваш вопрос и удалите решение. Спасибо.

André Kraak

Заменить "по цели" на "по источнику".

Рейтинг:
0

Member 12710388

СЛИЯНИЕ ЗАПАСОВ КАК D
ИСПОЛЬЗОВАНИЕ INVENTORY_STAGE В КАЧЕСТВЕ S
ВКЛ. (D. CODE = S. CODE)
КОГДА НЕ СООТВЕТСТВУЕТ ЦЕЛИ
Затем вставить(код,INV_DESCRIPTION,BVRVMODDATE) значения(С. код,С. INV_DESCRIPTION,С. BVRVMODDATE)
При совпадении и (S. BVRVMODDATE < & gt; D. BVRVMODDATE)
ЗАТЕМ ОБНОВИТЕ
SET CODE=S. CODE, INV_DESCRIPTION=S.INV_DESCRIPTION,BVRVMODDATE=S. BVRVMODDATE
КОГДА НЕ СООТВЕТСТВУЕТ ИСТОЧНИКУ
ПОТОМ УДАЛИТЬ;