Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Zwei SQL-Datenbanken abgleichen, WIE?

  Alt 20. Sep 2004, 10:59
Wäre es nicht so möglich?
  • Anmeldung an WinLine
  • Link zur KundenDB (KundenDB.Kunden)
  • Ein view auf die zu ändernden Daten:
    SQL-Code:
    CREATE OR REPLACE VIEW Clients2Synchronize AS
    SELECT Decode(k.A
                 ,NULL
                 ,1 /* kein Wert in Kunden -> INSERT */
                 ,2) DmlType /* andernfalls         -> UPDATE */
          ,Decode(k.A /* Der PK wird nur für's UPDATE gebraucht ;) */
                 ,NULL
                 ,-1
                 ,k.PK) PK
          ,sQ.A
          ,sQ.B
          ,sQ.C
    FROM (SELECT A, B, C
           FROM WinLine
           MINUS
           SELECT A, B, C /* alle Datensätze aus WinLine, */
           FROM KundenDB.Kunden) sQ /* die so nicht in Kunden enthalten sind */
           LEFT JOIN KundenDB.Kunden k
           ON k.A = sQ.A and /* deshalb Eindeutigkeit von A & B ;) */
              k.B = sQ.B
    UNION ALL
    SELECT 3 DmlType /* alle Datensätze aus Kunden, */
          ,k.PK /* die in WinLine nicht mehr da sind */
          ,k.A /* -> löschen */
          ,k.B
          ,k.C
    FROM KundenDB.Kunden k
    WHERE not EXISTS (SELECT IrgendWas
                       FROM WinLine
                       WHERE k.A = sQ.A and
                              k.B = sQ.B)
  • INSERT:
    SQL-Code:
    INSERT INTO WinLine
       (A, B, C)
       SELECT A, B, C
       FROM Clients2Synchronize sQ
       WHERE sQ.DmlType = 1
  • UPDATE:
    SQL-Code:
    UPDATE WinLine w
    SET (w.A, w.B, w.B) = (SELECT A, B, C
                              FROM Clients2Synchronize sQ
                              WHERE sQ.DmlType = 2 And sQ.PK = w.PK)
  • DELETE (wahrscheinlich unnötig):
    SQL-Code:
    DELETE FROM WinLine w
    WHERE w.PK in (SELECT PK
                    FROM Clients2Synchronize sQ
                    WHERE sQ.DmlType = 3)

Von Lösungen á la Daten in eine Delphi App holen, irgendwas damit machen und dann wieder zurückschieben halte überhaupt nichts.
Wenn man so seine Probleme löst, kann man sich gleich mySQL zulegen, eine halbwegs "intelligente" DB wie der SQL Svr wäre dann sinnlos.

BTW: Wer seine Problemlösungen nicht in reinem SQL oder der Script-Sprache der DB formulieren kann, sollte sein DB-Design überdenken.

Wie immer: Als ohne Gewehr, bin halt kein SQL Svr'ler Leusel???
  Mit Zitat antworten Zitat