Announcement

Collapse
No announcement yet.

Exists Spalte ???

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

  • Exists Spalte ???

    Hi,

    ich möchte eine Spalte in eine bestehende sql- Tabelle einfügen.

    Wie kann ich zuerst prüfen (anhand Sql- Befehl), ob diese Spalte schon in der Tabelle vorhanden ist?

    z.b. if not exists ?

    mfg

    Klaus Bürkle

  • #2
    Bei einem BDE-Programm würde mir folgendes Einfallen
    (Für ADO ähnlich):

    1, Abfrage mittels SELECT * FROM <Tabelle> where 1=2 (Liefert alle Spalten)

    2, Die Fields-Auflistung durchlaufen und mit dem Property FieldName die vorhandenen Spaltennamen nach dem gewünschen Spaltennamen suchen. Falls Spaltenname gefunden wird->Nix machen, falls nicht-> Spalte ergänze

    Comment


    • #3
      Hi,

      Oder mit folgender Funktion, die im Prinzip mit 'reinstem' SQL auskommt:

      <pre>
      function IsExistingField( const FldName, TblName: String; const SysIB: TIBSQL ): Boolean;
      begin
      with SysIB do
      Begin
      SQL.Text := 'select RDB$Field_Name from RDB$Relation_fields where RDB$Field_Name='+QuotedStr( FldName )+' and RDB$Relation_name='+QuotedStr( TblName );
      ExecQuery;
      Result := Eof;
      Close;
      end;
      end;
      </pre>

      Gruß
      Gesin

      Comment


      • #4
        Hi Leute,

        leider ist das nicht die Antwort die ich erwartet habe (sql-script) trotzdem danke.

        Gesine: wie kommst du auf Interbase Systemtabelle? Programmiere derzeit für Oracle und Mssql gleichzeitig.

        Mit freundlichen Grüßen

        Klaus Bürkl

        Comment


        • #5
          Da haben wir uns wohl mißverstanden.

          Für MSSQL hätte ich da was:

          SELECT COL_Length('<TableName>', '<ColumnName>')

          Liefert NULL zurück, wenn die Spalte nicht existiert

          Comment


          • #6
            Hi Bernhard

            Toll!

            Könntest Du noch bitte mir die richtige Syntax zeigen (Oracle)? Am besten ein Beispiel. Das klappt bei mir nicht (sql-fehler)

            Im Voraus danke!

            Mit freundlichen Grüßen

            Klaus Bürkl

            Comment


            • #7
              Hi Klaus,

              1)
              Auf Interbase kam ich, da Du dich nicht festgelegt hast und ich dieses Funktion hier fertig liegen hatte.

              2)
              Da in SQL-92 kein 'ColExists'-Befehl definiert ist, aber <b>jede</b> SQL-DB über Systemtabellen verfügt, muss die von mir angegeben SQL-Sequenz nur an das jeweilige Zielsystem angepasst werden. Diese könnte man dann zur sauberen Applikations/Server Trennung in einer StoredProc kapseln.

              3)
              Wenn Du von vorneherein eine proprietäre Funktion suchst, ist es natürlich ganz hilfreich auch zu erwähnen, um welches System es sich handelt ;-)

              Gruß
              Gesin

              Comment


              • #8
                Wie gesagt, die Lösung ist nur für MS-SQL.
                Für Oracle hab ich keine Ahnung. Solltest mal in der Onlinehilfe von Oracle suchen.

                Die Anmerkung 2, von Gesine wäre auch 'ne Lösung, aber ich gehe lieber über definierte Funktionen als über Systemtabellen, für die ich evtl. keine Leserechte habe (war beim Update eines DB-Modells aber kein Problem sein sollte

                Comment

                Working...
                X