Announcement

Collapse
No announcement yet.

Defaultwert einer Spalte ändern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Defaultwert einer Spalte ändern

    Hallo zusammen,

    alter table <TableName> modify <ColName> default <NewDefault>

    ...das hätte ich gern, geht aber net.

    Was ist die performanteste (und einfachste) Alternative?

    Danke schon mal.
    Undine.

  • #2
    Hallo Undine,

    Am Besten eine neue Domain anlegen und:
    update RDB$RELATION_FIELDS set
    RDB$FIELD_SOURCE = 'NEUE_DOMAIN'
    where (RDB$FIELD_NAME = 'COLNAME') and
    (RDB$RELATION_NAME = 'TABLENAME');
    <BR>
    und dann IBExpert von http://www.ibexpert.de die Personaledition besorgen. Damit geht das Alles einfach und auch der Syntax wird angezeigt.
    Gruß, Fran

    Comment


    • #3
      Also, irgendwie funktioniert das nicht. Oder ich habe was falsch gemacht (habe bisher noch nie mit Domains gearbeitet).

      Das habe ich gemacht:

      Eine neue Domain angelegt mit:

      CREATE DOMAIN DMN_CHAR1
      AS CHAR(1)
      DEFAULT '0'

      dann das von Dir vorgeschlagene Update ausgeführt:

      update RDB$RELATION_FIELDS set
      RDB$FIELD_SOURCE = 'DMN_CHAR1'
      where (RDB$FIELD_NAME = 'PAUSZUSCHLAG')
      and (RDB$RELATION_NAME = 'PZARBPRO');

      Danach steht jetzt, wenn ich mir die Metadaten der Tabelle PZARBPRO anzeigen lasse, beim Feld PAUSZUSCHLAG als Datentyp der Name der Domain (???). Dahinter steht dann (anders als bei allen anderen mit Defaultwert belegten Felden) "Default '0'".

      Wenn ich allerdings folgenden Select absetze...

      select RDB$DEFAULT_VALUE, RDB$DEFAULT_SOURCE, RDB$RELATION_NAME
      from RDB$RELATION_FIELDS
      where (RDB$FIELD_NAME = 'PAUSZUSCHLAG')
      and (RDB$RELATION_NAME = 'PZARBPRO');

      ...wird mir beim Doppelklick auf "(MEMO)" (Ausgabe: RDB$DEFAULT_SOURCE; da steht der vegebene Defaultwert drin) immer noch der alte Defaultwert angezeigt..

      <i>"und dann IBExpert von http://www.ibexpert.de die Personaledition besorgen. Damit geht das Alles einfach und auch der Syntax wird angezeigt. "</i>

      Das steht leider nicht in meiner Macht.
      Als Werkzeug stehen mir hier nur die IBConsole (IB) bzw. IBOConsole (FB) zur Verfügung - mehr nicht :-/
      Da unsere Software verschiedene RDBMSs unterstützt, ist es auch nicht so einfach, die Anschaffung eines proprietären Tools durchzusetzen

      Comment


      • #4
        Hallo Undine,
        ok, wenn bereits ein Default definiert war, sieht es etwas anders aus.
        Du musst die alten Einträge noch entfernen. Die neue Definition wird aus der Domain geholt.
        <CODE>
        update RDB$RELATION_FIELDS set
        rdb$default_source=null, rdb$default_value=null
        where (RDB$FIELD_NAME = 'PAUSZUSCHLAG')
        and (RDB$RELATION_NAME = 'PZARBPRO')
        </CODE>
        Deshalb ist die Arbeit mit Domains viel einfacher. Da muss man darauf nicht mehr achten.
        @ Das steht leider nicht in meiner Macht.
        Die Personal Edition ist kostenfrei.
        <BR>Gruß, Frank
        Ich hoffe, du sicherst auch immer vor Änderung an den Systemtabellen :

        Comment


        • #5
          hmmm.., ich weiß nicht. Der neue Defaultwert wird auf diese Weise zwar übernommen, aber in den Metadaten steht als Datentyp immer noch der Domain-Name...<br><br>
          Wirklich elegant ist das nicht.<br>
          Gibt's da keine andere Lösung?<br><br>

          <i>Die Personal Edition ist kostenfrei.</i><br>
          Interessant. Danke für den Tipp

          Comment


          • #6
            Hallo,
            elegant ist es wirklich nicht. Ich verwende aber ausschließlich Domains. Damit kann man auch mit Alter Domain z.B. den Default - Wert nachträglich ändern.
            Das der DomainName als Datentyp erscheint, ist korrekt.
            Arbeitet man mit IBExpert, ist auch der Ursprungsdatentyp mit allen Parametern ersichtlich.<BR>
            Wenn du Domains nicht verwenden möchtest, musst in der Tabelle RDB$RELATION_FIELDS die Columns rdb$default_source und rdb$default_value ändern. Das Problem ist, dass ich nicht weiss, wie rdb$default_value gebildet wird.
            Du kannst dann nur eine temporäre Spalte mit dem neuen gewünschten Defaultwert anlegen und aus rdb$default_value den Wert auslesen und in die aktuelle Tabelle übertragen. Die Änderung von rdb$default_source sollte einfach sein.<BR>
            Gruß, Fran

            Comment

            Working...
            X