AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Feldinhalte kopieren mit SQL
Thema durchsuchen
Ansicht
Themen-Optionen

Feldinhalte kopieren mit SQL

Ein Thema von needatip · begonnen am 12. Mär 2010 · letzter Beitrag vom 12. Mär 2010
Antwort Antwort
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#1

Feldinhalte kopieren mit SQL

  Alt 12. Mär 2010, 10:44
Datenbank: SQL SERVER • Version: 2008 • Zugriff über: ADO
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Feldinhalte kopieren mit SQL

  Alt 12. Mär 2010, 10:49
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.
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
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#3

Re: Feldinhalte kopieren mit SQL

  Alt 12. Mär 2010, 11:33
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Feldinhalte kopieren mit SQL

  Alt 12. Mär 2010, 11:38
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.
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
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Feldinhalte kopieren mit SQL

  Alt 12. Mär 2010, 14:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Feldinhalte kopieren mit SQL

  Alt 12. Mär 2010, 15:16
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Feldinhalte kopieren mit SQL

  Alt 12. Mär 2010, 17:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#8

Re: Feldinhalte kopieren mit SQL

  Alt 12. Mär 2010, 19:01
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 ?
  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 16:21 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