Replikerings problemer med MERGE statements
Hej Eksperter,Jeg har et problem med MERGE statements i SQL Server. Jeg to databaser på hver sin server, Begge databaser har en identisk tabel (Test_Schedule i eksemplet herunder). Jeg vil lave et check på hver side, der hvert minut sammenligner begge tabeller og indsætter, opdaterer eller sletter data efter behov.
Dvs. hvis et ID sidst er blevet opdateret på Server1, så skal det opdateres på Server2 og omvendt. Hvis et ID er sidst blevet tilføjet på Server1, så skal det indsættes på Server2 og omvendt. Hvis et ID sidst er blevet slettet fra Server1, så skal det slettes på Server2 og omvendt.
Eksempel koden herunder køres automatisk hvert minut på begge servere, og virker fint til at indsætte og opdatere data, men jeg kan ikke få sletninger til at virke ordentligt da koden i stedet ser det som om at data'en mangler på den ene side, og derfor indsætter det i stedet for at slette det på den anden side.
Hvad er den bedste måde at overkomme det her problem på?
Eksempel kode:
DECLARE
@dbDateTime datetime
SET @dbDateTime = DATEADD(HOUR, -24, GETDATE());
WITH Test_Schedule_CTE (ScheduleID, Section, [Day], StartTime, EndTime, dbDateTime)
AS
(
SELECT
ScheduleID,
Section,
[Day],
StartTime,
EndTime,
dbDateTime
FROM dbo.Test_Schedule ts
)
MERGE Test_Schedule_CTE AS TARGET
USING (
SELECT
ScheduleID,
Section,
[Day],
StartTime,
EndTime,
dbDateTime
FROM [REMOTE].Database.dbo.Test_Schedule ts
WHERE 1 = 1
AND dbDateTime >= @dbDateTime
) AS SOURCE
ON (
TARGET.ScheduleID = SOURCE.ScheduleID
)
WHEN MATCHED AND SOURCE.dbDateTime > TARGET.dbDateTime THEN
UPDATE
SET TARGET.Section = SOURCE.Section,
TARGET.[Day] = SOURCE.[Day],
TARGET.StartTime = SOURCE.StartTime,
TARGET.EndTime = SOURCE.EndTime,
TARGET.dbDateTime = SOURCE.dbDateTime
WHEN NOT MATCHED BY TARGET THEN
INSERT
VALUES (
SOURCE.ScheduleID,
SOURCE.Section,
SOURCE.[Day],
SOURCE.StartTime,
SOURCE.EndTime,
SOURCE.dbDateTime
);