SQL Befehl - Spezifisches Update / Copy von anderem Datensatz

speedone

Benutzer
Beiträge
12
Hallo Leute,

ich habe z. B. folgende Tabellenstruktur "Belegpositionen":
  • Artikelnummer
  • Menge
  • _Extrafeld1
  • _Extrafeld2
  • _Extrafeld3
Ich möchte nun folgendes mit einem SQL Kommando realisieren:

Code:
UPDATE ´Belegpositionen´ SET <alle Felder mit einem Unterstrich vorm Namen>
 
FROM ´Belegpositionen´
 
JOIN 'Belegpositionen' ON id= 1
 
WHERE id=2

Ich möchte also alle Extrafelder (gekennzeichnet durch einen Unterstrich vorm Namen) aus einem anderen Datensatz der gleichen Tabelle kopieren. Ich möchte aufgrund der hohen Anzahl und öfteren Erweiterung von neuen Extrafeldern dies dynamisch lösen. Es dürfen allerdings nur die Extrafelder "kopiert" werden, da die anderen Felder abweichen können.

Hat jemand von euch dazu einen Ansatz?

LG
speedone
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.409
Das ist schon ziemlich schwer. Du musst auf jedenfall mit dynamischem SQL arbeiten um den Query zusammen zu setzen und du musst die Spaltennamen aus den Systemtabellen ziehen. Da die Anzahl der Spalten auch Variabel ist wirst du mit Schleifen arbeiten müssen. Haben deine ExtraFelder alle den selben Datentyp?
 

speedone

Benutzer
Beiträge
12
Ich habe mir schon gedacht, dass das nicht leicht wird :)
Die Extrafelder haben verschiedene Datentypen.

Ich überlege mir aber nun, da dies ja wahrscheinlich sowieso nicht ohne weiteres als einfacher SQL Befehl umgesetzt werden kann, im Programm mit Schleifen und einzelnen Abfragen umzusetzen.
 

ukulele

Datenbank-Guru
Beiträge
4.409
Ich wollte schon drauf los schreiben aber mit verschiedenen Datentypen ist das nicht mehr lustig :)

Code:
SELECT    sysobjects.name AS table_name,
        syscolumns.name AS column_name,
        systypes.name AS datatype,
        syscolumns.[length] AS [length]
FROM    sysobjects
JOIN    syscolumns ON sysobjects.id = syscolumns.id
JOIN    systypes ON syscolumns.xtype = systypes.xtype
WHERE    sysobjects.xtype = 'U'
AND        sysobjects.name != 'index'
Über diese Abfrage solltest du schonmal alle Tabellen mit allen Spalten und deren Datentypen ermitteln können. Wenn du hier nach deinem table_name = 'Belegpositionen' AND column_name LIKE '_%' suchst kannst du dir mit Schleifen und Variablen dein SQL Code zusammen stricken (ebenfalls als Variable z.B. @Code VARCHAR(2000)) und dann nachher mit EXEC @code ausführen. Mit reinem SQL geht das sicherlich, ich schätze mal da würd ich ein paar Stunden für brauchen bis das problemlos läuft^^
 

speedone

Benutzer
Beiträge
12
Ja, ich bin schon dabei das Programmseitig umzusetzen. Der zeitliche Aufwand für eine reine SQL Abfrage zu bauen lohnt sich nicht^^
Danke für deine Hilfe.
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.160
Ich möchte also alle Extrafelder (gekennzeichnet durch einen Unterstrich vorm Namen) aus einem anderen Datensatz der gleichen Tabelle kopieren. Ich möchte aufgrund der hohen Anzahl und öfteren Erweiterung von neuen Extrafeldern dies dynamisch lösen. Es dürfen allerdings nur die Extrafelder "kopiert" werden, da die anderen Felder abweichen können.

Hat jemand von euch dazu einen Ansatz?

LG
speedone

Ja, mein Ansatz wäre: vergiß das. Da sind mehrere grobe Fehler:

  • Feldnamen als Träger von Meta-Informationen. Also: UPDATE alle Felder, die mit _ beginnen.
  • hohe Anzahl solcher Felder: vermutlich enthalten sehr, sehr viele dieser Felder später einfach nichts, sind also NULL, stimmt's
  • und, ganz schlimm: 'öfteren Erweiterung von neuen Extrafeldern' - ganz besonders schlimm

Normalisieren Dein Design. Das, was Du jetzt hast, klingt übertrieben so: Du hast einen Shop, wo es immer wieder neue Artikel gibt. Für jeden neuen Artikel legst Du eine neue Spalte an.
Das mag jetzt übertrieben sein, aber vielleicht verstehst so besser, was ich meine. Lagere Deine _ExtraFelder in eine separate Tabelle aus und erstelle eine 1:N - dahin.
 
Oben