Hallo #,
meine
DB wird ständig erweitert, es kommen neue Felder dazu.
Da ich kein Freund von "select *" bin,
prüfe ich immer vorher, welche Felder vorhanden sind,
und baue dann die
Query danach auf.
Mmeistens werden nicht alle Felder benutzt.
Nein ! Das Prüfen erfolgt nur einmal beim Programmstart
Nun die Frage:
Zum Prüfen benutze ich bisher ein
select * from tab where id=0
Dann wird mit Fields in einer Schleige gekuckt, ob das betreffende Feld drin steht.
Bei grossen Tabellen dauert es natürlich etwas (wobei das "dauert" relativ ist).
Es wird ja ein leeres Recordset zurückgegeben.
Die Execute bei einer mitteren Tabelle sind 30ms, die fetch 5ms (ibplanalyzer).
Eine andere Möglichkit wäre der direkte Zugriff auf die Metadaten, also:
SQL-Code:
select rdb$relation_fields.rdb$field_name
from
rdb$relation_fields
where
(rdb$relation_fields.rdb$relation_name='PERSONAL')
and
(
(rdb$relation_fields.rdb$field_name='NAME')
or
(rdb$relation_fields.rdb$field_name='FIRSTNAME')
)
Jetzt sind die Zeiten gnau anders rum (Execute 5ms, Fetch 30ms wegen dem Recordset).
Hat hier jemand praktische Erfahrungen mit "FieldExistsInTable" und Firebird ?
DBServer-Unabhängigkeit spielt hier erst mal keine Rolle.
Danke im voraus
Heiko