Всем привет!
Есть таблица, участвующая в репликации.
Она заполняется несколькими операторами в одной транзакции, типа такого:
BEGIN TRANSACTION;
WITH CTE AS (SELECT ... FROM Sales WHERE ...)
MERGE CTE WITH (TABLOCK) AS T
USING (SELECT ... FROM ) AS S
ON T.ProductId = S.ProductId AND T.Day = S.Day
WHEN MATCHED AND (ISNULL(T.Price, 0.0) <> ISNULL(S.Price, 0.0) ...
THEN UPDATE SET Price = S.Price, ...
WHEN NOT MATCHED BY TARGET
THEN INSERT (ProductId, Day, ...)
VALUES(S.ProductId, S.Day,...)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;
UPDATE Sales WITH (TABLOCK)
SET Price = ...
WHERE ...
UPDATE Sales
SET Price = ...
WHERE ...
EXEC DW.JumpingPrice
COMMIT TRANSACTION
При этом значения большинства строк в итоге не изменяется. Но все изменения,выполненные в транзакции, реплицируются, что значительно увеличивает траффик.
Каким образом можно реплицировать только итоговые изменения?
Пока есть одна идея: создать таблицу-клон, и через MERGE её обновлять.
Может, кто-нибудь ещё что-то подскажет?