![]() |
Datenbank: SQL SERVER • Version: 2008 • Zugriff über: ADO
Feldinhalte kopieren mit SQL
Hallo,
ich habe folgende Tabelle.
SQL-Code:
Feld ID = Identity-Feld und Primary-Key
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 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:
Geht das mit SQL oder muss ich die einzelnen Felder in Delphi kopieren?
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 | | In Wirklichkeit sind das nämlich ca. 100 Felder. Wer kann mir hier helfen? |
Re: Feldinhalte kopieren mit SQL
Nicht wirklich komfortabel, aber versuch einmal
SQL-Code:
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.
UPDATE Tabelle
SET Bezeichnung = (SELECT Bezeichnung FROM Tabelle WHERE ID = 2), Preis = (SELECT Preis FROM Tabelle WHERE ID = 2) WHERE ID = 4 |
Re: Feldinhalte kopieren mit SQL
Ich glaube, bei MS-SQL kann man die Spalten irgendwie zusammenziehen:
SQL-Code:
Die genaue Schreibweise kenne ich nicht, aber ich habe so etwas Ähnliches wohl schon einmal gelesen.
UPDATE Tabelle
SET Bezeichnung, Preis = (SELECT Bezeichnung, Preis FROM Tabelle WHERE ID = 2) WHERE ID = 4 Gruß Jürgen |
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.
|
Re: Feldinhalte kopieren mit SQL
Meinst du das in etwa so?
SQL-Code:
Und dann halt alle Felder übergeben.
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 |
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:
Gruß K-H |
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. |
Re: Feldinhalte kopieren mit SQL
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 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