Ignorieren nicht vorhandener Spalten

maximailer

Neuer Benutzer
Beiträge
2
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
 
Werbung:
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)
 
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.
 
Werbung:
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.

Du könntest das in Funktionen packen. Was auch geht: Views anlegen und damit arbeiten. Oder, alternativ, gleich konsistent arbeiten.
 
Zurück
Oben