Einzelnen Beitrag anzeigen

alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#26

AW: SQL Update alle Einträge

  Alt 21. Jun 2010, 22:32
Und was war am MERGE mächtiger?
IST!
Bsp. aus der Firebird.Docs:
SQL-Code:
      MERGE
         INTO customers c
         USING (SELECT * FROM customers_delta WHERE id > 10) cd
         ON (c.id = cd.id)
         WHEN MATCHED THEN
            UPDATE SET name = cd.name
         WHEN NOT MATCHED THEN
            INSERT (id, name)
               VALUES (cd.id, cd.name)
Beim "UPDATE OR INSERT" werden IMMER entwerder INSERT oder UPDATE ausgeführt.
Dabei werden beim INSERT und UPDATE die GLEICHEN Felder eingefügt/geändert.

Beim Merge hat man die Möglichkeit beim Update andere Felder als beim Insert zu setzen. Und man kann eine von beiden Operationen wegzulassen.

Um wieder zu Thema "SQL Update alle Einträge" zurückzukehren:
In diesem Fall, es fände nur der ..WHEN MATCHED THEN UPDATE SET .. -Zweig
Verwendung, ..WHEN NOT MATCHED THEN INSERT .. würde man weglassen.

Ein Geschwindigkeitsvorteil gegenüber einem einfachen "UPDATE .. SET = (Select.. From..)"
ergibt sich wenn mehrer Felder der Zieltabelle aus gleichzeitig geändert werden.

SQL-Code:
      
  MERGE INTO customers c
   USING (SELECT * FROM customers_delta WHERE id > 10) cd
   ON (c.id = cd.id)
   WHEN MATCHED THEN
     UPDATE SET
       name = cd.name,
       FeldX = cd.ZZ,
       FeldY = cd.TTT;
Alexander
  Mit Zitat antworten Zitat