Ich suche (vorzugsweise) eine SQL-Anweisung, die die Tabellen- / und Spaltennamen für jede Tabelle mit einem Fremdschlüssel für eine bestimmte Tabelle in Sybase auswählt. Ich denke, es sollte irgendwie mit den sys...
Tischen möglich sein, aber da ich für Sybase völlig neu bin, kann ich weder Kopf noch Fuß daraus machen. Daher wird jede Hilfe in die richtige Richtung sehr geschätzt.
Bearbeiten: Der Vollständigkeit halber: SELECT @@VERSION
kehrt zurück
'Adaptive Server Enterprise / 15.0.3 / EBF 17156 ESD # 3 / P / Sun_svr4 / OS 5.8 / ase1503 / 2726/64-Bit / FBO / Fr 5. Februar 05:26:23 2010'
Edit 2
Vielen Dank für Ihre Vorschläge, insbesondere für Andrew Bickertons Kommentar. Dadurch konnte ich eine rudimentäre SQL-Select-Anweisung erstellen, um einen weiteren Ausgangspunkt zu finden.
Falls sich jemand anderes dafür interessiert, hier ist es:
select
fko.name "Foreign key name",
par.name "Referenced table name",
fk1.name || ' -> ' || pk1.name "Reference 1",
fk2.name || ' -> ' || pk2.name "Reference 2",
fk3.name || ' -> ' || pk3.name "Reference 3",
fk4.name || ' -> ' || pk4.name "Reference 4"
from
sysobjects tab join
sysconstraints con on tab.id = con.tableid join
sysobjects fko on con.constrid = fko.id join
sysreferences ref on con.constrid = ref.constrid join
sysobjects par on par.id = ref.reftabid left join
---- 1. Column
syscolumns fk1 on ref.fokey1 = fk1.colid and
ref.tableid = fk1.id left join
syscolumns pk1 on ref.refkey1 = pk1.colid and
ref.reftabid = pk1.id left join
---- 2. Column
syscolumns fk2 on ref.fokey2 = fk2.colid and
ref.tableid = fk2.id left join
syscolumns pk2 on ref.refkey2 = pk2.colid and
ref.reftabid = pk2.id left join
---- 3. Column
syscolumns fk3 on ref.fokey3 = fk3.colid and
ref.tableid = fk3.id left join
syscolumns pk3 on ref.refkey3 = pk3.colid and
ref.reftabid = pk3.id left join
---- 4. Column
syscolumns fk4 on ref.fokey4 = fk4.colid and
ref.tableid = fk4.id left join
syscolumns pk4 on ref.refkey4 = pk4.colid and
ref.reftabid = pk4.id -- Et cetera...
where
tab.type = 'U' and
tab.name = 'tq84_f' and
fko.type = 'RI'
quelle
Antworten:
Es ist schon eine Weile her, seit ich in Sybase gearbeitet habe, aber (aus dem Speicher) sollte die folgende SQL Sie in die richtige Richtung weisen:
Sie können die Sybase-Bücher auch online lesen (Systemtabellen).
quelle
sysconstraint
dort?Ein weiterer Ansatz ist "sp_depends"
Sybase-URL: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sprocs/html/sprocs/sprocs68.htm
quelle
Beachten Sie, dass der oben gezeigte Ansatz (unter Verwendung von Sysconstraints und Sysreferences) nur funktioniert, wenn Sie über eine referenzielle Einschränkung verfügen. Wenn Sie nur einen Fremdschlüssel definiert haben, dieser jedoch nicht eingeschränkt ist, wird er dort nicht angezeigt. Um alle Fremdschlüssel für eine bestimmte Tabelle abzurufen, können Sie syskeys verwenden:
(Ersetzen Sie den Bericht durch den Namen Ihrer Tabelle).
Die erste Spaltenrückgabe ist der Name der Tabelle, wobei ein Fremdschlüssel auf diese Tabelle verweist. Die zweite Spalte ist die Liste der Spalten in dieser Tabelle. Die dritte Spalte enthält die Listenspaltennamen in der Referenzierungstabelle.
Wenn Sie also eine Tabelle people_report mit einer Spalte rep_key haben, die ein Fremdschlüssel für report.key ist, erhalten Sie ungefähr Folgendes:
quelle
Wenn Sie nur nach dem Namen der referenzierten Tabellen suchen, hilft dieser Code
quelle