AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi INSERT INTO SELECT ohne Spaltenliste
Thema durchsuchen
Ansicht
Themen-Optionen

INSERT INTO SELECT ohne Spaltenliste

Ein Thema von Alex.G · begonnen am 18. Okt 2011 · letzter Beitrag vom 24. Okt 2011
Antwort Antwort
Alex.G

Registriert seit: 30. Aug 2011
31 Beiträge
 
Delphi 7 Enterprise
 
#1

INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 08:45
Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO
Moin!

Ich will alle Daten einer Datenbank (aus jeder Tabelle) in eine Zweite identisch aufgebaute Datenbank übertragen. Da dies in Delphi mit einer For-Schleife abläuft, kann ich keine feste Spaltenliste eintragen. Habe auch schon gegooglet und diese Variante gefunden:
Code:
INSERT INTO TestDB2.dbo.Kunden SELECT * FROM TestDB1.dbo.Kunden
Leider bekomme ich eine Exception, da keine Spaltenliste angegeben ist. Gibt es eine Möglichkeit die Spaltenliste auszulassen bzw. variabel anzugeben?

Gruß
Alex
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#2

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 08:52
Evtl. mit Delphi-Referenz durchsuchenTDataset.GetFieldNames und die Liste dann als Delphi-Referenz durchsuchenTStrings.CommaText übergeben?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 08:53
Du müsstest erst z.B. mit einem
Code:
Select * from TestDB1.dbo.Kunden where 1=2
dir die Liste der Ergebnisspalten liefern und dann das SQL-Statement entsprechend erweitern.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 11:05
Code:
Select *
Into NewTable
From OldTable
gegf.
Code:
Select *
Into AndereDB.dbo.NewTable
From OldTable
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Alex.G

Registriert seit: 30. Aug 2011
31 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 12:04
Danke für die Antworten!
Was aber, wenn die Datenbanken auf verschiedenen Servern laufen?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 12:10
Danke für die Antworten!
Was aber, wenn die Datenbanken auf verschiedenen Servern laufen?
Dann müsstest du versuchen einen (bei MS SQL Server heißt Linked Server) "Verbindungsserver" einzurichten.
Ist je nach DMBS unterschiedlich aufwändig und Fehleranfällig.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Alex.G

Registriert seit: 30. Aug 2011
31 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 12:22
Danke für die Antworten!
Was aber, wenn die Datenbanken auf verschiedenen Servern laufen?
Dann müsstest du versuchen einen (bei MS SQL Server heißt Linked Server) "Verbindungsserver" einzurichten.
Ist je nach DMBS unterschiedlich aufwändig und Fehleranfällig.
Meinst Du einen "Verbindungsserver" mit Delphi einrichten?
Wie müsste ich da vorgehen?
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
684 Beiträge
 
Delphi 12 Athens
 
#8

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 14:18
Code:
Select *
Into NewTable
From OldTable
das erstellt aber eine neue Tabelle! Ein INSERT INTO...SELECT FROM fügt in eine vorhandene ein. Ja nachdem, welcher Befehl verwendet wird und ob die Tabelle schon existiert wird beim einen oder beim anderen ein Fehler geworfen.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 18. Okt 2011, 14:30
@joachimd
Du hast recht, ich hatte nicht gesehen dass er die Tabellen schon angelegt hatte ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Alex.G

Registriert seit: 30. Aug 2011
31 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: INSERT INTO SELECT ohne Spaltenliste

  Alt 21. Okt 2011, 08:34
Als erstes mache ich ein SELECT * ... über eine ADOConnection zum ersten Server. Danach über eine zweite Connection ein INSERT INTO ...
Leider funktioniert das ganze nicht richtig. Mit diesem Quelltext...
Delphi-Quellcode:
  for i := 0 to qryMaster.Recordset.RecordCount-1 do
  begin
    columnList := '';
    valList := '';
    qryMasterExec.SQL.Text := 'SELECT * FROM '
      + qryMaster.Recordset.Fields.Item['TABLE_NAME'].Value;
    qryMasterExec.Open;
    qryMasterExec.Requery;
    qryMasterExec.Recordset.MoveFirst;

    for n := 0 to qryMasterExec.Recordcount-1 do
    begin
      for t := 0 to qryMasterExec.RecordCount-1 do
      begin
        columns[t] := qryMaster.Recordset.Fields.Item['COLUMN_NAME'].Value;
        values[t] := qryMasterExec.Recordset.Fields.Item[columns[t]].Value;
      end;
      qryMasterExec.Recordset.MoveNext;
    end;
    for e := 0 to High(values)-1 do
    begin
      columnlist := columnlist + columns[e] + ' ';
      valList := valList + values[e] + ' ';
      mSQL.Lines.Add('INSERT INTO '
        + qryMaster.Recordset.Fields.Item['TABLE_NAME'].Value
        + ' ('+columnList+') VALUES'
        + ' ('+valList+')'
        );
    end;
    qryMaster.Recordset.MoveNext;
  end;
...bekomme ich leider nur Insert's wie:
Code:
INSERT INTO Rechnung (ID ) VALUES (4 )
INSERT INTO Rechnung (ID ID ) VALUES (4 4 )
INSERT INTO Rechnung (ID ID ID ) VALUES (4 4 4 )
INSERT INTO Rechnung (KID ) VALUES (2 )
INSERT INTO Rechnung (KID KID ) VALUES (2 2 )
INSERT INTO Rechnung (KID KID KID ) VALUES (2 2 2 )
INSERT INTO Rechnung (PID ) VALUES (1 )
INSERT INTO Rechnung (PID PID ) VALUES (1 1 )
INSERT INTO Rechnung (PID PID PID ) VALUES (1 1 1 )
INSERT INTO Kunde (ID ) VALUES (3 )
INSERT INTO Kunde (ID ID ) VALUES (3 3 )
INSERT INTO Kunde (ID ID ID ) VALUES (3 3 3 )
INSERT INTO Kunde (Name ) VALUES (Plaum               )
INSERT INTO Kunde (Name Name ) VALUES (Plaum               Plaum               )
INSERT INTO Kunde (Name Name Name ) VALUES (Plaum               Plaum               Plaum               )
INSERT INTO Kunde (Vorname ) VALUES (Jürgen              )
INSERT INTO Kunde (Vorname Vorname ) VALUES (Jürgen              Jürgen              )
INSERT INTO Kunde (Vorname Vorname Vorname ) VALUES (Jürgen              Jürgen              Jürgen              )
INSERT INTO Kunde (Ort ) VALUES (Siegen              )
INSERT INTO Kunde (Ort Ort ) VALUES (Siegen              Siegen              )
INSERT INTO Kunde (Ort Ort Ort ) VALUES (Siegen              Siegen              Siegen              )
INSERT INTO Produkt (ID ) VALUES (2 )
INSERT INTO Produkt (ID ID ) VALUES (2 2 )
INSERT INTO Produkt (ID ID Ort ) VALUES (2 2 Siegen              )
INSERT INTO Produkt (Name ) VALUES (Lenovo R500          )
INSERT INTO Produkt (Name Name ) VALUES (Lenovo R500          Lenovo R500          )
INSERT INTO Produkt (Name Name Ort ) VALUES (Lenovo R500          Lenovo R500          Siegen              )
INSERT INTO Produkt (Kommentar ) VALUES (Lenovo Thinkpad Laptop                            )
INSERT INTO Produkt (Kommentar Kommentar ) VALUES (Lenovo Thinkpad Laptop                            Lenovo Thinkpad Laptop                            )
INSERT INTO Produkt (Kommentar Kommentar Ort ) VALUES (Lenovo Thinkpad Laptop                            Lenovo Thinkpad Laptop                            Siegen              )
(Alle Daten sind ausgedacht!)
Was mache ich falsch?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 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 by Thomas Breitkreuz