Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Insert mit Where Klausel (https://www.delphipraxis.net/185280-insert-mit-where-klausel.html)

Walter Landwehr 27. Mai 2015 15:48

Datenbank: Firebird • Version: 2.5.4 • Zugriff über: IBO

Insert mit Where Klausel
 
Hallo SQL Spezis,

gibt es eine Möglichkeit im insert Statement mit einer Where Klausel zu arbeiten. z.B. where Versicherernr in (20....86)

insert into TBL_KETTEN (VERSICHERERNR, KETTENNAME, FAVORIT, ANLAGE, ANLAGEBENUTZER)
Values (:VERSICHERERNR, :KETTENNAME, :FAVORIT, :ANLAGE, :ANLAGEBENUTZER)

Ich möchte in der TBL_KETTEN neue Datensätze einfügen wobei die VERSICERERNR unterschiedlich ist z.B.
20,21,22,23,24,25,26,72,73,74,75,76,77,78,79,80,81 ,82,83,84,85,86.

Ich muss pro VERSICHERERNR 106 Datensätze einfügen und wollte nicht so viele Statement schreiben.

vagtler 27. Mai 2015 15:53

AW: Insert mit Where Klausel
 
Wie wäre es mit einer Schleife?

mkinzler 27. Mai 2015 15:59

AW: Insert mit Where Klausel
 
Am Besten als parametrisierte Abfrage in einer Schleife

SQL-Code:
insert into TBL_KETTEN (VERSICHERERNR, KETTENNAME, FAVORIT, ANLAGE, ANLAGEBENUTZER)
Values (:VERSICHERERNR, :KETTENNAME, :FAVORIT, :ANLAGE, :ANLAGEBENUTZER);
Delphi-Quellcode:
sl: TStrings;
i: Integer;
...

sl := TStringList.Create;

Query.ParamByName('KETTENNAME').Value := <Kettenname>';
... // Alle Felder aus VERSICHERERNR

sl.CommaText := '20,21,22,23,24,25,26,72,73,74,75,76,77,78,79,80,81,82,83,84,85,8';

for i := 0 to sl.Count-1 do
begin
  Query.ParamByName('VERSICHERERNR').asString := sl[i];
  Query.ExecSQL;
end;

Sir Rufo 27. Mai 2015 16:02

AW: Insert mit Where Klausel
 
Ob das mit Firebird jetzt geht, kann ich nicht sagen, generell überträgt man zunächst die sich immer wiederholdenen Daten in eine temporäre Tabelle und baut sich dann daraus ein INSERT-SELECT-Statement.
SQL-Code:
CREATE TEMPORARY TABLE VN
  ( VERSICHERERNR INT );
Jetzt die Daten in diese Tabelle füllen (per Schleife)
SQL-Code:
INSERT INTO VN ( VERSICHERERNR )
VALUES ( :VERSICHERERNR );
und dann die restlichen Daten in einem Rutsch
SQL-Code:
insert into TBL_KETTEN (VERSICHERERNR, KETTENNAME, FAVORIT, ANLAGE, ANLAGEBENUTZER)
SELECT VN.VERSICHERERNR, :KETTENNAME, :FAVORIT, :ANLAGE, :ANLAGEBENUTZER
FROM VN
Damit habe ich den geringsten Traffic erzeugt

Walter Landwehr 27. Mai 2015 16:09

AW: Insert mit Where Klausel
 
Danke,

habe es mit der Schleife gelöst.

TBx 27. Mai 2015 16:10

AW: Insert mit Where Klausel
 
Schade, da war mein Nachbar schneller ....

ggf. kommst Du auch ohne Temporäre Tabelle aus, wenn Du die benötigten Versicherernr bereits über ein Select-Statement ermitteln kannst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 Uhr.

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