我正在寻找(最好)一个 SQL 语句,它为任何具有 Sybase 中给定表的外键的表选择表/列名。我认为表格应该以某种方式成为可能,sys...
但是对于 sybase 来说是全新的,我无法完全理解它。因此,我们非常感谢对正确方向的任何帮助。
编辑:为了完整起见:SELECT @@VERSION
返回
'Adaptive Server Enterprise/15.0.3/EBF 17156 ESD#3/P/Sun_svr4/OS 5.8/ase1503/2726/64-bit/FBO/Fri Feb 5 05:26:23 2010'
编辑 2
非常感谢您的建议,尤其是Andrew Bickerton 的评论。这使我能够构建一个基本的 SQL 选择语句,作为进一步发展的起点。
如果其他人对此感兴趣,这里是:
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'
自从我在 sybase 工作以来已经有一段时间了,但是(从记忆中)以下 sql 应该为您指明正确的方向:
您还可以在线查看sybase 书籍(系统表)
另一种方法是“sp_depends”
Sybase URL: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sprocs/html/sprocs/ sprocs68.htm
请注意,上面显示的方法(使用 sysconstraints 和 sysreferences)仅在您有引用约束时才有效。如果您只定义了一个外键但没有约束,您将不会在那里看到它。要获取与给定表相关的所有外键,可以使用 syskeys:
(用您的表格名称替换报告)。
第一列返回的是表名,外键指向该表。第二列是此表中的列列表。第三列是引用表中的列表列名。
因此,如果您有一个 people_report 表,其中列 rep_key 是 report.key 的外键,您会得到如下内容:
如果您只是在寻找引用的表名称,此代码将有所帮助