Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Remote » SQL Remote-Replikationsplanung » SQL Remote-Replikation planen und einrichten » Aktualisierungskonflikte » Benutzerdefinierte Konfliktlösung mit Trigger

 

Datumskonflikte auflösen

Um zu veranschaulichen, wie Sie Datumskonflikte lösen können, nehmen wir eine Tabelle in einem Kontaktverwaltungssystem mit einer Spalte an, die die aktuelleren Kontakte mit den einzelnen Kunden enthält.

Ein Vertreter spricht mit einem Kunden an einem Freitag, sendet jedoch seine Änderungen an die konsolidierte Datenbank erst am Montag. Inzwischen trifft ein zweiter Vertreter den Kunden am Samstag und aktualisiert die Änderungen am gleichen Abend.

Es gibt keinen Konflikt, wenn die Aktualisierung vom Samstag an die konsolidierte Datenbank repliziert wird, aber wenn die Aktualisierung am Montag eintrifft, findet sie die Zeile bereits geändert vor.

Standardmäßig würde die Montag-Aktualisierung übernommen werden, wodurch die Spalte die falsche Information enthält, dass der letzte Kontakt am Freitag stattgefunden hat. Aktualisierungskonflikte in dieser Spalte müssen jedoch gelöst werden, indem das aktuellere Datum in die Zeile eingefügt wird.

Die Lösung implementieren

Der folgende RESOLVE UPDATE-Trigger wählt den aktuelleren der beiden neuen Werte aus und gibt ihn in die Datenbank ein.

CREATE TRIGGER contact_date RESOLVE UPDATE
 ON Contacts
 REFERENCING OLD AS old_name
  NEW AS new_name
 FOR EACH ROW
 BEGIN
   IF new_name.contact_date <
      old_name.contact_date THEN
          SET new_name.contact_date
           = old_name.contact_date
   END IF
 END;

Wenn der Wert, der aktualisiert wird, höher (später) als der Wert ist, der ihn ersetzen würde, wird der neue Wert so eingestellt, dass der Eintrag unverändert bleibt.