Hallo,
kenne Firebird nicht.
Bei Oracle oder
SQL-Server täte ich ins Dictionary schauen und mir dort aus den Einträgen zur Laufzeit das passende Statement bauen, mit Ausnahme der Spalten, bei denen ich selbst was ändern möchte.
Unter
SQL-Server könnte das ungefähr so aussehen:
SQL-Code:
select 'insert into tabelle (ID '
union all
select ' ,' + column_name from information_schema.columns where table_name like 'tabelle' and column_name <> 'ID'
union all
select ') select 4 as ID'
union all
select ',' + column_name from information_schema.columns where table_name like 'tabelle' and column_name <> 'ID'
union all
select 'from tabelle where id = 3'
Wenn Du Dir nun das Ergebnis dieses
SQL nimmst, solltest Du das Insert-Statement erhalten, das Du wünschst.
SQL-Code:
insert into tabelle (ID
,name
,vorname
,beruf
) select 4 as ID
,name
,vorname
,beruf
from tabelle where id = 3
Und wenn Du neue Spalten in die Tabelle einfügst, so ändert sich das Ergebnis der ersten Abfrage um die entsprechenden Spalten und passt sich somit an Dein geändertes Datenmodell an.
Unter Oracle haben wir mal ein System gebaut, dass permanenten Änderungen des Datenmodells unterworfen war und ist. Diese Routinen sind nun seit etwa 5 Jahren im Einsatz und mussten bisher nicht einmal angepasst werden.