Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
2.964 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Ermitteln von foreign keys per SQL Abfrage auf Systemtabellen

  Alt 26. Sep 2012, 09:29
Hilft Dir das weiter?

aus http://de.wikibooks.org/wiki/Einf%C3...pps_und_Tricks
Code:
-- listet die Fremdschlüssel einer Tabelle auf (i.d.R. nur zwischen je einer Spalte)
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,
       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 */
       JOIN RDB$Relation_Constraints co1
         ON rel.RDB$Constraint_Name = co1.RDB$Constraint_Name
       JOIN RDB$Indices idx
         ON rel.RDB$Constraint_Name = idx.RDB$Index_Name
       JOIN RDB$Relation_Constraints co2
         ON rel.RDB$Const_Name_UQ = co2.RDB$Constraint_Name
       JOIN RDB$Index_Segments fl1
         ON rel.RDB$Constraint_Name = fl1.RDB$Index_Name
       JOIN RDB$Index_Segments fl2
         ON rel.RDB$Const_Name_UQ = fl2.RDB$Index_Name
 WHERE (NOT rel.RDB$Constraint_Name LIKE 'RDB$')
 ORDER BY  rel.RDB$Constraint_Name
Gruß, Jo

Geändert von jobo (26. Sep 2012 um 09:30 Uhr) Grund: hab kein rot gesehen
  Mit Zitat antworten Zitat