Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Update alle Einträge (https://www.delphipraxis.net/152394-sql-update-alle-eintraege.html)

DeddyH 21. Jun 2010 18:39

AW: SQL Update alle Einträge
 
[ code=SQL ] (ohne Leerzeichen natürlich)

alex517 21. Jun 2010 19:11

AW: SQL Update alle Einträge
 
Zitat:

Zitat von DeddyH (Beitrag 1030728)
[ code=SQL ] (ohne Leerzeichen natürlich)

Danke.
Aber im Moment stelle ich mich noch zu blöd an (siehe #20), aber vllt. lern ich's ja noch.

mkinzler 21. Jun 2010 19:18

AW: SQL Update alle Einträge
 
SQL-Code:
MERGE
gab es nur in der alpha
Und wurde später durch
SQL-Code:
Update or Insert
ersetzt

SQL-Code:
Update Or Insert into <Tabelle> (<Feldliste>)
values ( <Werteliste> )
matching (<Feldliste übereinstimmnde Felder>);
Der SQL-Tag ist eine Erweiterung des Code-Tags; diesen einfach um =SQL erweitern

alex517 21. Jun 2010 20:25

AW: SQL Update alle Einträge
 
Zitat:

Zitat von mkinzler (Beitrag 1030755)
SQL-Code:
MERGE
gab es nur in der alpha
Und wurde später durch
SQL-Code:
Update or Insert
ersetzt

allerdings ist in Firebird das
SQL-Code:
MERGE INTO..
um einiges mächtiger als das
SQL-Code:
Update or Insert
.
wobei beide ihre Berechtigung haben. Aber ich glaube das ist auch schon Off Topic


Zitat:

Zitat von mkinzler
Der SQL-Tag ist eine Erweiterung des Code-Tags; diesen einfach um =SQL erweitern

Mich wunderte nur, warum das "SQL-Code:" bei manchen erscheint, bei mir aber nicht:?
Aber jetzt hab ich's begriffen.

mkinzler 21. Jun 2010 20:31

AW: SQL Update alle Einträge
 
Und was war am
SQL-Code:
MERGE
mächtiger?

alex517 21. Jun 2010 21:32

AW: SQL Update alle Einträge
 
Zitat:

Zitat von mkinzler (Beitrag 1030777)
Und was war am
SQL-Code:
MERGE
mächtiger?

IST!:-D
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
SQL-Code:
..WHEN MATCHED THEN UPDATE SET ..
-Zweig
Verwendung,
SQL-Code:
..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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz