Wolfgang: SQL - Datentypänderung in bestehender Tabelle

Hi Leute,
hab eine Tabelle, die bereits beschrieben ist und ich möchte den Datentyp einiger Spalten ändern (char -> varchar), ohne dass wichtige Zeichen verloren gehen...geht das?? oder muss ich die ganze Tabelle auslesen und neu aufsetzen?? *mühsamist*

Vielen Dank für Eure Hilfe...

lG
Wolfgang

  1. Hi,

    hab eine Tabelle, die bereits beschrieben ist und ich möchte den Datentyp einiger Spalten ändern (char -> varchar), ohne dass wichtige Zeichen verloren gehen...geht das??

    keine Ahnung, da Du nicht das geringste über das von Dir verwendete DBMS verrätst. An Deiner Stelle würde ich in der Doku aber mal unter ALTER TABLE nachschlagen.

    Cheatah

    1. keine Ahnung, da Du nicht das geringste über das von Dir verwendete DBMS verrätst. An Deiner Stelle würde ich in der Doku aber mal unter ALTER TABLE nachschlagen.

      danke, da hab ich den von mir verfügbaren Medien bereits geschaut, aber keinen Befehl gefunden...so ähnlich hab ich es mir auch vorgestellt..hmm
      DBMS? DatenbankMS? SQL 2? 3? keine Ahnung..

      1. Hallo,

        Eigentlich : MySQL, Oracle, Informix, MSSQL ...?
        Die sicherste Methode dürfte sein:
        -neue Tabelle definieren mit selben Aufbau wie die alte, bloß geänderten Datentyp.
        -INSERT INTO neu SELECT * FROM alt
        -Nachschauen, ob in neu alles sauber angekommen ist
        -alt löschen
        -neu umbenennen

        Ist nicht hyperkomfortable, aber wenn man schonmal Daten verloren hat wählt man diese Variante häufiger. Zumal Du keine genaueren Angaben zu Deiner DB gemacht hast.

        HTH
        Gruß Frank

        1. Eigentlich : MySQL, Oracle, Informix, MSSQL ...?
          Die sicherste Methode dürfte sein:
          -neue Tabelle definieren mit selben Aufbau wie die alte, bloß geänderten Datentyp.
          -INSERT INTO neu SELECT * FROM alt
          -Nachschauen, ob in neu alles sauber angekommen ist
          -alt löschen
          -neu umbenennen

          Ist nicht hyperkomfortable, aber wenn man schonmal Daten verloren hat wählt man diese Variante häufiger. Zumal Du keine genaueren Angaben zu Deiner DB gemacht hast.

          Diese Variante werde ich wohl anwenden, wenn keine anderen Lösungsvorschläge mehr kommen ;-)) Danke Dir auf jeden Fall für Dein Bemühen :-)

          1. Diese Variante werde ich wohl anwenden, wenn keine anderen Lösungsvorschläge mehr kommen ;-)) Danke Dir auf jeden Fall für Dein Bemühen :-)

            Eine andere Möglichkeit wäre Du machst ein Backup von der Tabelle / DB änderst mit ALTER TABLE tabelle ALTER(MODIFY) COLUMN spalte typ NULL
            in etwa der Art. Ganz sicher bin ich nicht, da ja nicht mal Du genau sagen kannst, was für eine DB Du verwendest.

            Gruß Frank

      2. Hi,

        DBMS? DatenbankMS? SQL 2? 3? keine Ahnung..

        Sprichst Du von Microsoft SQL Server? In dem Fall: Wenn der neue Datentyp nicht vereinbar ist mit Inhalten in der Spalte kriegst Du eine Fehlermeldung. Dh wenn Du zB versuchst einen char in einen int umzuwandeln, wirst nix passieren wenn ein "a" drin vorkommt. char und varchar duerfte kein Problem sein, aber Du musst natuerlich auf die Laenge der einzelnen Eintraege achten - ein zu langer String wird bei conversion von zB varchar(255) zu char(10) einfach abgeschnitten.
        Und das ganze passiert einfach durch Aenderung des datentyps im design Modus fuer die Tabelle in SQL Server Enterprise Manager.

        Gruss, Mel

        1. Sprichst Du von Microsoft SQL Server? In dem Fall: Wenn der neue Datentyp nicht vereinbar ist mit Inhalten in der Spalte kriegst Du eine Fehlermeldung. Dh wenn Du zB versuchst einen char in einen int umzuwandeln, wirst nix passieren wenn ein "a" drin vorkommt. char und varchar duerfte kein Problem sein, aber Du musst natuerlich auf die Laenge der einzelnen Eintraege achten - ein zu langer String wird bei conversion von zB varchar(255) zu char(10) einfach abgeschnitten.
          Und das ganze passiert einfach durch Aenderung des datentyps im design Modus fuer die Tabelle in SQL Server Enterprise Manager.

          Das klingt schon mal nach dem, was ich machen möchte...ich glaub das is ne Oracle SQL Datenbank...
          ich brauch ja nur den Befehl für die Datentypänderung, so wie z.B.: ALTER table_name WHERE column_name....od. REPLACE....hab leider noch sehr beschränkte Kenntnisse über SQL...
          Design Modus hab ich keinen.... :-((

          lG Wolfgang

          1. Hi

            Das klingt schon mal nach dem, was ich machen möchte...ich glaub das is ne Oracle SQL Datenbank...

            Hmm, ich glaube in Oracle kann man nur den Datentyp von leeren Spalten aendern. Der workaround waere also (wie glaub ich schon von jemand gesagt) den Inhalt der Spalte in eine eine neue temporaere Spalte/Tabelle zu transferieren, alte Spalte gleich Null setzen, Datentyp der alten Spalte aendern, Inhalt wieder zuruecktransferieren. Wenn alles ok ist die temporaere Spalte/Tabelle loeschen.

            ich brauch ja nur den Befehl für die Datentypänderung, so wie z.B.: ALTER table_name WHERE column_name....od. REPLACE....hab leider noch sehr beschränkte Kenntnisse über SQL...

            ALTER TABLE table_name MODIFY column_name CHAR(10) NULL

            !wenn ich mich recht entsinne - aber das muesste doch in jeder SQL documentation drin stehen?

            Gruss, Mel