![]() |
Datenbank: Sybase • Zugriff über: ODBC
SQL Updatefrage zum Trimmen
Salute,
ich habe eine SQL Update Problem. Ich habe eine Tabelle mit KundenNr. Diese sehen folgendermaßen aus: 12312 121 4564 34 64 65456466 5646456464666 4564646 56 1646465 KundenNr ist Prim.Key Nun möchte ich alle Leerstellen in der KundeNr löschen. Ergebnis sollte also so aussehen: 123121214564 346465456466 5646456464666 456464656 1646465 Wie müsste der Updatebefehl lauten ? THX WEBSTER |
Re: SQL Updatefrage zum Trimmen
Hallo WEBSTER,
wenn Sybase dir eine entsprechende String-Funktion bereit stellen würde, dann würdest du sie im Handbuch gefunden haben. Bleiben genau zwei Möglichkeiten: du implementierst dir eine user defined function, die alle Leerstellen aus einer Zeichenkette entfernt, oder du erledigst das in der host language (Delphi?), was ich für das Naheliegendste halte:
Delphi-Quellcode:
Grüße vom marabu
function Without(const s, chars: string): string;
var i, iDel: integer; begin Result := s; iDel := 0; for i := 1 to Length(s) do if Pos(s[i], chars) = 0 then Result[i - iDel] := s[i] else Inc(iDel); SetLength(Result, Length(s) - iDel); end; |
Re: SQL Updatefrage zum Trimmen
Salute,
ich habe folgenden Tipp bekommen: Update Kundentabelle set KundenNr = REPLACE ('KundenNr',' ','') Das scheint mein richtiger Weg zu sein. Leider habe ich nun das Problem: Verletzung der Integritätsregel: Primärschlüssel in der Tabelle 'KHKArtikel' wird vom Fremdschlüssel 'KHKArtiKundenKHKArtikel' in der Tabelle 'KHKArtikelKunden' referenziert. Wie kann ich nun beide Tabellen gleichzeitig updaten. Ich müsste mir einen Join bauen… oder… ? Und wenn ja, wie…? THX WEBSTER |
Re: SQL Updatefrage zum Trimmen
Hi Webster,
Leider hast du gegen die Oberste Heilige Grundregel aller Datenbanken verstossen (vielleicht nicht Du selbst, aber der Entwickler): Benutze nie! NIE! NIEMALS!!! Tabellen über 'sprechende' Kundennummern. Warum? Weil! (...den Grund siehst du gerade) Wer sowas macht, gehört gefeuert. Um Dein PRoblem zu beheben musst du die Foreign-Key Verknüpfung aufheben, beide Tabellen updaten und dann die Forgein-Keys wieder einpflegen. |
Re: SQL Updatefrage zum Trimmen
Hi alzaimar,
wenn er schon am Datenmodell einer fremden Anwendung (SAGE) rumfummelt, dann hat er noch eine andere Option. Die gemeldete constraint violation deutet auf eine REFERENCES-Klausel hin, bei der für das nachträgliche Ändern von Schlüsselfeldern der Zusatz ON UPDATE CASCADE fehlt. Und Webster, man bekommt genau die Qualität bei den Antworten, die man vorher in die Fragestellung investiert. Hättest ruhig schreiben können, dass es sich um eine turn-key Lösung handelt. Gut zu wissen wäre auch, welche Version der Datenbank du einsetzt - Sybase ist nicht gleich Sybase. Grüße vom marabu |
Re: SQL Updatefrage zum Trimmen
Salute.
@alzaimar: Sorry, aber was ist bitte eine 'turn-key Lösung'? Die DB-Version ist 5.0. Wie habe ich das -> ON UPDATE CASCADE anzuwenden...? THX WEBSTER |
Re: SQL Updatefrage zum Trimmen
Hallo Webster,
ich denke, deine Frage bzgl. Turn-Key-Lösung ist an mich gerichtet? So nennt man eine Software, die für den Einsatz in der betrieblichen Praxis zugekauft wird - quasi "schlüsselfertig". Aufgrund der von dir angegebenen Tabellen-Namen bin ich darauf gekommen, dass deine Probleme irgendwie mit KHK Kaufmann oder einem Vorgänger (heute im Vertrieb von SAGE) zusammen hängen. Die von dir angegebene "DB-Version 5.0" setze ich mal mit Sybase SQL Server 5.0 gleich. Das ist kein aktuelles Produkt - die heißen Adaptive Server V12 oder SQL Anywhere V9 - wenn ich mich richtig informiert habe. Was die Anwendung von ON UPDATE CASCADE angeht, so ist die Syntax - laut MS T-SQL Referenz, die hoffentlich nicht zu sehr abweicht - folgende:
SQL-Code:
Eventuell musst du das bereits existierende constraint vorher mit DROP freigeben:
ALTER TABLE detail_table
WITH CHECK ADD CONSTRAINT constraint_name FOREIGN KEY (detail_fk) REFERENCES master_table (master_pk) ON UPDATE CASCADE
SQL-Code:
Die klein geschriebenen Namen musst du passend ersetzen.
ALTER TABLE detail_table
DROP CONSTRAINT constraint_name marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 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-2025 by Thomas Breitkreuz