Einzelnen Beitrag anzeigen

ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#4

AW: Ermitteln von foreign keys per SQL Abfrage auf Systemtabellen

  Alt 26. Sep 2012, 09:17
@jobo
Danke, das wirkt (derzeit ohne Nebenwirkungen ). Ich musste nur ein paar kleine Änderungen vornehmen, da IB7.1 bzw. FB2.0 das "case" im select nicht mag und ich per Parameter
die Tabelle auswähle, die mich interessiert.

Das also hat bei mir funktioniert:

Code:
select
rel.rdb$constraint_name as foreignkey,
co1.rdb$relation_name as detailtable,
/*
case idx.rdb$segment_count
  when 1 then fl1.rdb$field_name
  else idx.rdb$segment_count
end as fields,
*/
fl1.rdb$field_name,
idx.rdb$segment_count,
rel.rdb$const_name_uq as primarykey,
co2.rdb$relation_name as mastertable,
fl2.rdb$field_name as masterfield
from rdb$ref_constraints rel
/*  RDB$Relation_Constraints wird 2x benötigt:
    als co1 für den Tabellennamen des ForeignKey
    als co2 für den Tabellennamen des PrimaryKey, auf den sich der ForeignKey bezieht */
/*  ebenso RDB$Index_Segments
    als fl1 für den Spaltennamen des FK
    als fl2 für den Spaltennamen des PK */
left outer join rdb$relation_constraints co1 on rel.rdb$constraint_name = co1.rdb$constraint_name
left outer join rdb$indices idx on rel.rdb$constraint_name = idx.rdb$index_name
left outer join rdb$relation_constraints co2 on rel.rdb$const_name_uq = co2.rdb$constraint_name
left outer join rdb$index_segments fl1 on rel.rdb$constraint_name = fl1.rdb$index_name
left outer join rdb$index_segments fl2 on rel.rdb$const_name_uq = fl2.rdb$index_name
where
(not rel.rdb$constraint_name like 'RDB$')
and
co2.rdb$relation_name = :master_table
order by rel.rdb$constraint_name
  Mit Zitat antworten Zitat