Запрос MERGE для поддержки клона таблицы - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу сохранить клон определенной таблицы (sourcedb..sourcetable) в другой базе данных (имя таблицы там: targettable) для целей olap.Поскольку это касается всех трех операторов вставки, удаления и обновления, я решил использовать оператор MERGE.Ключевой мыслью здесь является передача данных только на основе столбца версии строк исходной таблицы.Помня, что целевая таблица имеет те же поля, что и исходное (плюс еще несколько), PK в тех же полях и все типы данных одинаковые (за исключением столбца rowversion, который будет двоичным (8), так как это будетзначение строки в исходной таблице и, следовательно, не в самой строке), я придумал следующее:

WITH live as
(
    select *
    from sourcedb..sourcetable
    where 1=1
        and (........)  -- We don't want rows from the source table that don't meet these criteria
)
MERGE 
    INTO targettable as olap 
    USING live 
    ON olap.PKfield1=live.PKfield1 and olap.PKfield2=live.PKfield2 and .. -- join on all PK fields
    WHEN MATCHED AND live.rowversioncol > olap.rowversioncol then update set
        field1      =   live.field1,
        field2      =   live.field2,
        (...all NON-PK fields....)
    WHEN NOT MATCHED BY TARGET THEN
        INSERT (field1,field2,....(all fields)......) 
        VALUES (field1,field2,....(all fields)......)   
    WHEN NOT MATCHED BY SOURCE THEN
        DELETE

Можете ли вы подтвердить, что выполнение этого запроса точно гарантирует, что целевая таблица имеет те же данныеисходная таблица (отфильтрованные строки удалены)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...