Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Ignorieren nicht vorhandener Spalten

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von maximailer, 11 Juli 2014.

  1. maximailer

    maximailer Neuer Benutzer

    Hallo,
    ich bin neu in diesem Forum und hoffe ihr könnt mir bei einer blöden Situation helfen.

    Basis ist, dass ich Projektdatenbanken habe die schon upgedated sind und eine neue Spalte ('BG_USER_TEMPLATE_01) in einer Tabelle haben und einige die es noch nicht sind.
    Mit der Situation muss ich derzeit leben.
    Damit alle User ein wichtiges SQL aufrufen können muss ich derzeit zwei SQL´s zur Verfügung stellen.

    Jetzt war meien Idee ob ich das SQL so schreiben kann, dass es immer funktioniert.

    Der erste Ansatz war
    Select
    CASE
    When
    0=(Select Count(COLUMN_NAME)
    FROM INFORMATION_SCHEMA.COLUMNS
    Where TABLE_NAME='BUG' AND COLUMN_NAME='BG_USER_TEMPLATE_01')
    Then 'N.A.'
    Else 'Vorhanden'
    END
    From BUG

    -->Zumindest sehe ich ob die Spalte da ist oder nicht

    Jetzt dachte ich, dass ich auch im Fall des Vorhandenseins der Spalte diese Ausgeben kann

    Select
    CASE
    When
    0=(Select Count(COLUMN_NAME)
    FROM INFORMATION_SCHEMA.COLUMNS
    Where TABLE_NAME='BUG' AND COLUMN_NAME='BG_USER_TEMPLATE_01')
    Then 'N.A.'
    Else BUG.BG_USER_TEMPLATE_01
    END
    From BUG
    --> Das führ aber leider zu
    Msg 207, Level 16, State 1, Line 8
    Invalid column name 'BG_USER_TEMPLATE_01'.


    Jetzt meine ev blöde Frage
    Gibt es irgend einen kranken Trick mit dem ich das SQL doch so schreiben kann, dass es immer funtktioniert (unabhängig ob die Tabelle die Spalte hat oder nicht)?


    Danke in jedem Fall für eure Hilfe
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Jein. Dynamischen SQL und EXEC verwenden.
     
  3. ukulele

    ukulele Datenbank-Guru

    So ungefähr:
    Code:
    DECLARE    @query VARCHAR(1000)
    
    IF EXISTS spalte_bla
    BEGIN
        SET        @query = 'SELECT spalte_bla,* FROM tabelle'
    END
    ELSE
    BEGIN
        SET        @query = 'SELECT NULL AS spalte_bla,* FROM tabelle'
    END
    
    EXEC(@query)
     
  4. maximailer

    maximailer Neuer Benutzer

    Danke für die Idee. Das SQL-Statement muss leider direkt in HP QualityCenter ausgeführt werden (für die Wissenden - ein Excel-Report) und dort scheint das SQL nicht mächtig genug zu sein.
    Ev gibt es ja noch andere Ideen ansonst muss ich halt vorerst bei zwei SQL´s bleiben.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Du könntest das in Funktionen packen. Was auch geht: Views anlegen und damit arbeiten. Oder, alternativ, gleich konsistent arbeiten.
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden