Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feldtyp ändern (https://www.delphipraxis.net/203144-feldtyp-aendern.html)

Walter Landwehr 17. Jan 2020 16:50

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBO

Feldtyp ändern
 
Hallo,

ich möchte in einer Tabelle ein Feldtyp ändern. Feld Faktor ist DOUBLE PRECISION (Dom_Betrag) soll geändert werden in Numeric (DOM_Faktor)

Das Feld enthält bereits Werte und dürfen nicht verlorengehen. Gibt es hier eine einfache Lösung?
Vielen Dank für jeden Tipp.

stifflersmom 17. Jan 2020 17:11

AW: Feldtyp ändern
 
Vielleicht erst mal eine zusätzliche Spalte anfügen und die Werte dann übertragen.
Wenn die gut aussehen, kannst Du das ursprüngliche Feld auf den gewünschten neuen Datentyp umwandeln und die Werte dann zurückkopieren.

Pseudo-Code:
Code:
// Neues Feld
alter table blabla add field tempfield decimal (10,2);
// Alte Werte kopieren
update table blabla set tempfield = sourcefield;
// Auf Unterschiede abfragen
select * from blabla where temfield <> sourcefield;
Wenn hier dann keine Werte rausgekommen sind, dann beherzt weitermachen...

Uwe Raabe 17. Jan 2020 17:15

AW: Feldtyp ändern
 
  • altes Feld umbenennen
  • neues Feld anlegen
  • neues Feld aus altem Feld füllen
  • altes Feld löschen

hoika 18. Jan 2020 15:39

AW: Feldtyp ändern
 
Hallo,

alter table alter column

Und dann den Inhalt überprüfen.

Bernhard Geyer 18. Jan 2020 18:06

AW: Feldtyp ändern
 
Zitat:

Zitat von hoika (Beitrag 1455476)
Hallo,

alter table alter column

Und dann den Inhalt überprüfen.

Direktes ändern einer Spalte wird in wenigen Fällen vom Datenbanksystem unterstützt.
Nur wenn es praktisch 1:1 ohne Anpassung in die neue Definition geht funktioniert das.
Als z.B. beim vergrößern von varchar-Spalten.

hoika 22. Jan 2020 23:44

AW: Feldtyp ändern
 
Hallo,
Zitat:

Direktes ändern einer Spalte wird in wenigen Fällen vom Datenbanksystem unterstützt.
Klar geht das. (unter Firebird)

Char(20) -> VarChar(20)
Smallint -> Integer

Im gegebenen Fall spielt aber die Frage der unterschiedlichen Interpretation
der Datentypen eine Rolle.

->
Da darf sich der TE aber selber drum kümmern.
Deshalb meine Info zu "Prüfen"

himitsu 23. Jan 2020 00:26

AW: Feldtyp ändern
 
Jo, neu erstellen, umkopieren+casten und das Alte löschen geht immer.
Man kann auch das Alte erstmal nicht löschen. So hat man die originalen Werte immernoch, falls etwas schief ging und man es später erst bemerkt.

In der 2.0er-Hilfe steht nichts davon (die 2.5er sah ich grade nicht), aber scheinbar soll es das wirlich geben: (jedenfalls schrieben mehrere das als Lösung, wenn jemand irgendwo nach deinem Problem fragte, und andere DBMS nutzen die selbe Syntax)
SQL-Code:
ALTER TABLE Tabelle ALTER COLUMN Faktor TYPE NUMERIC; -- oder SET DATA TYPE statt TYPE

Sollte es wirklich gehen (Syntax wird nicht abgelehnt), aber es mit dem Inhalt Probleme geben, dann auch gleich mal das versuchen:
SQL-Code:
ALTER TABLE Tabelle ALTER COLUMN Faktor TYPE NUMERIC USING Cast(Faktor AS NUMERIC); -- im USING den "neuen" Inhalt berechnen


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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