2016-04-14 11 views
1

Ich muss alle Spalten in einer Tabelle finden, die Primärschlüssel sind und ihre Spaltennamen zurückgeben.Finden Sie alle Spaltennamen, die Primärschlüssel in Firebird Datenbank sind

Gibt es eine Möglichkeit, die ich mit der Connection.GetSchema() Methode der Firebird .net API erreichen kann? Wenn nicht, wie würde eine SQL-Anweisung aussehen, um dies zu erreichen?

Ich brauche kein vollständiges Codebeispiel, sondern eine Anleitung, wie es geht.

In meinem Szenario habe ich eine eingebettete Firebird-Datenbank und möchte gespeicherte Prozeduren aus dem Datenbankschema erzeugen. Ich brauche die Primärschlüssel-Spaltennamen, um Auslöser für eine Tabelle zu generieren, die einige Metadaten in eine Verfolgungstabelle einfügen.

Ich verwende die neueste Version von Firebird mit dem neuesten .NET Connector (v.2.5.5)

Wenn Sie mehr Informationen über mein Problem bitte kommentieren brauchen!

+0

* 'alle Spalten in einer Tabelle, die primäre keys' sind * - Verwirrung zu reduzieren, gibt es nur ** ein Primärschlüssel ** pro Tabelle, der aus einer oder mehreren Spalten besteht (die letztere wird oft * zusammengesetzter Primärschlüssel * genannt) – Wolf

Antwort

3

Um Primärschlüsselfelder aller Tabellen wählen Sie Firebird Systemtabellen wie verwenden können:

select 
    ix.rdb$index_name as index_name, 
    sg.rdb$field_name as field_name, 
    rc.rdb$relation_name as table_name 
from 
    rdb$indices ix 
    left join rdb$index_segments sg on ix.rdb$index_name = sg.rdb$index_name 
    left join rdb$relation_constraints rc on rc.rdb$index_name = ix.rdb$index_name 
where 
    rc.rdb$constraint_type = 'PRIMARY KEY' 
+0

Ich habe Ihre Anweisung geändert, um den Tabellennamen anstelle des Indexnamens zu erhalten, und er funktioniert jetzt. Danke für die schnelle Antwort! – Saladino

+0

Gern geschehen. Ich habe auch den Tabellennamen hinzugefügt. –