Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feldinhalte kopieren mit SQL (https://www.delphipraxis.net/149012-feldinhalte-kopieren-mit-sql.html)

needatip 12. Mär 2010 10:44

Datenbank: SQL SERVER • Version: 2008 • Zugriff über: ADO

Feldinhalte kopieren mit SQL
 
Hallo,

ich habe folgende Tabelle.

SQL-Code:
ID | IDAUKTION | POS | BEZEICHNUNG | PREIS
1  | 5         | 1   | Messer     | 5
2  | 5         | 2   | Gabel      | 3
3  | 5         | 3   | Löffel     | 4
4  | 5         | 4   |             | 
5  | 5         | 5   |             |
Feld ID = Identity-Feld und Primary-Key
Feld POS = Eindeutiger Index

Die Datensätze mit der ID 4 und 5 existieren bereits als leere Datensätze.
Jetzt möchte ich z.B. alle Felder (ohne natürlich der ID) des Datensatzes mit der ID 2
kopieren und diese dann in den Datensatz mit der ID 4 einfügen.
Das Feld Pos sollte dabei nicht kopiert werden, sondern nur die Felder Bezeichnung und Preis.

Einfach so halt

SQL-Code:
ID | IDAUKTION | POS | BEZEICHNUNG | PREIS
1  | 5         | 1   | Messer     | 5
2  | 5         | 2   | Gabel      | 3
3  | 5         | 3   | Löffel     | 4
4  | 5         | 4   | Gabel      | 3
5  | 5         | 5   |             |
Geht das mit SQL oder muss ich die einzelnen Felder in Delphi kopieren?
In Wirklichkeit sind das nämlich ca. 100 Felder.
Wer kann mir hier helfen?

DeddyH 12. Mär 2010 10:49

Re: Feldinhalte kopieren mit SQL
 
Nicht wirklich komfortabel, aber versuch einmal
SQL-Code:
UPDATE Tabelle
SET Bezeichnung =
  (SELECT Bezeichnung
   FROM Tabelle
   WHERE ID = 2),
Preis =
  (SELECT Preis
   FROM Tabelle
   WHERE ID = 2)
WHERE ID = 4
Eine bequemere Lösung fällt mir für ein Update nicht ein (ein INSERT wäre etwas einfacher). Aber evtl. hat ein Crack hier ja noch eine bessere Idee.

Jürgen Thomas 12. Mär 2010 11:33

Re: Feldinhalte kopieren mit SQL
 
Ich glaube, bei MS-SQL kann man die Spalten irgendwie zusammenziehen:
SQL-Code:
UPDATE Tabelle
   SET Bezeichnung, Preis =
  (SELECT Bezeichnung, Preis
     FROM Tabelle
    WHERE ID = 2)
 WHERE ID = 4
Die genaue Schreibweise kenne ich nicht, aber ich habe so etwas Ähnliches wohl schon einmal gelesen.

Gruß Jürgen

DeddyH 12. Mär 2010 11:38

Re: Feldinhalte kopieren mit SQL
 
Wenn das keine einmalige Sache sein soll, würde ich evtl. eine SP in Erwägung ziehen. Darin selektiert man einmalig die zu kopierenden Daten und legt sie in Variablen ab. Anschließend wird das Update-Statement dann auch viel überschaubarer. Das hätte zudem den Vorteil, dass man nur die beiden IDs (Quelle und Ziel) als Parameter übergeben müsste.

needatip 12. Mär 2010 14:38

Re: Feldinhalte kopieren mit SQL
 
Meinst du das in etwa so?

SQL-Code:
CREATE PROCEDURE MovePoS
@IDSource int,
@IDDest int,

AS
BEGIN
UPDATE Tabelle
SET Bezeichnung =
  (SELECT Bezeichnung
   FROM Tabelle
   WHERE ID = @IDSource),
Preis =
  (SELECT Preis
   FROM Tabelle
   WHERE ID = @IDSource)
WHERE ID = @IDDest
GO
Und dann halt alle Felder übergeben.

p80286 12. Mär 2010 15:16

Re: Feldinhalte kopieren mit SQL
 
Nochmal zum Verständnis:
es existieren a Datensätze mit der ID=2 und auch a Datensätze mit der ID=4 und Du möchtest, daß nach Deiner Aktion 2a Datensätze existieren, wobei jeweils zwei Datensätze den gleichen Inhalt haben, abgesen vom Feld ID ?

Da schlage ich dir vor nimm drei Tabellen
1)
Typ (ID), TypDatensatznr
2)
Datensatznr,ID_AUKTION,BEZEICHNER,PREIS
3)
TypDatensatznr,Datensatznr

Damit kannst die die wildesten Typ/ID-Vergaben machen ohne nur einen Datensatz zu kopieren.

Zitat:

Feld ID = Identity-Feld und Primary-Key
Wenn der gleiche Primary-Key bei mehreren Datensätzen auftaucht ist der nach meinem Geschmack nicht sehr "Primary"

Gruß
K-H

needatip 12. Mär 2010 17:34

Re: Feldinhalte kopieren mit SQL
 
Nein, das hast du falsch verstanden.
Es gibt nur einen Primary Key - Spalte ID.

Es werden von Anfang an schon ca. 5000 leere Datensätze mit einer fortlaufenden Pos-Nummer
von 1-5000 angelegt (Spalte Pos).
Die Daten werden nachher eingetragen.

haentschman 12. Mär 2010 19:01

Re: Feldinhalte kopieren mit SQL
 
Zitat:

Es werden von Anfang an schon ca. 5000 leere Datensätze mit einer fortlaufenden Pos-Nummer
von 1-5000 angelegt (Spalte Pos).
Die Daten werden nachher eingetragen.
...und was hat das für einen tieferen Sinn ? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr.

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