![]() |
Datenbank: FB • Version: 1.5 • Zugriff über: bde
Vorhandensein eines Feldes prüfen
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 :wall: ;) Nun die Frage: Zum Prüfen benutze ich bisher ein
SQL-Code:
Dann wird mit Fields in einer Schleige gekuckt, ob das betreffende Feld drin steht.
select * from tab where id=0
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:
Jetzt sind die Zeiten gnau anders rum (Execute 5ms, Fetch 30ms wegen dem Recordset).
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') ) Hat hier jemand praktische Erfahrungen mit "FieldExistsInTable" und Firebird ? DBServer-Unabhängigkeit spielt hier erst mal keine Rolle. Danke im voraus Heiko |
Re: Vorhandensein eines Feldes prüfen
SQL-Code:
Sollte deutlich schneller sein, da kein Zugiff auf die Nutzdaten stattfindet.
SELECT * FROM Tabelle WHERE 0=1
|
Re: Vorhandensein eines Feldes prüfen
Hm,
also bei FB 1.5 erzeugt das obige Statement einen full table scan, Execute: 30 ms, Fetch: 10 ms. Heiko |
Re: Vorhandensein eines Feldes prüfen
Zitat:
Man könnte es aber auch mit
SQL-Code:
versuchen.
SELECT TOP 0 * FROM Tabelle
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz