2017-01-09 49 views
2

[db2-as400]我有一个表ENR_DATA,它有列EnrollmentID作为主键。这个列被许多表格称为“外键”。有没有办法列出所有引用表的ENR_DATA表的表?DB2找到引用我的表的表

回答

1

有几个目录视图,每个只给出答案的一部分,你必须将它们连接在一起。

  • SYSCST提供了约束类型的约束列表。从这里我们可以选择外键约束。此表中的TABLE_NAME是包含外键的表。
  • SYSKEYCST提供给定外键,主键或唯一约束的列的列表,以及键在列中的序号位置以及关联的表名。
  • SYSREFCST提供由给定外键约束引用的主键或唯一键约束的名称。

从我们可以写出下面的SQL这三张表:

select cst.constraint_schema, cst.constraint_name, 
     fk.table_schema, fk.table_name, fk.ordinal_position, fk.column_name, 
     pk.table_schema, pk.table_name, pk.column_name 
    from qsys2.syscst cst 
    join qsys2.syskeycst fk 
     on fk.constraint_schema = cst.constraint_schema 
     and fk.constraint_name = cst.constraint_name 
    join qsys2.sysrefcst ref 
     on ref.constraint_schema = cst.constraint_schema 
     and ref.constraint_name = cst.constraint_name 
    join qsys2.syskeycst pk 
     on pk.constraint_schema = ref.unique_constraint_schema 
     and pk.constraint_name = ref.unique_constraint_name 
    where cst.constraint_type = 'FOREIGN KEY' 
    and fk.ordinal_position = pk.ordinal_position 
    and pk.table_name = 'ENR_DATA' 
    and pk.column_name = 'ENROLLMENTID' 
    order by cst.constraint_schema, cst.constraint_name; 

这将让你通过外键引用“ENR_DATA”表名。注意我的ENROLLMENTID全部大写。这就是DB2 for i存储所有列名称的方式,除非使用“”引用它们。

+0

这就是我需要感谢的一吨! – uSeruSher

1

IBM i上的DB2(AS 400)提供list of all system tables, the system catalog。这是元数据存储的地方。其中一个视图SYSCST, is the view with all constraints,视图SYSCSTCOL包含有关约束列的信息,SYSCSTDEP存储依赖关系。

因此,您将查询SYSCST,SYSCSTCOL和SYSCSTDEP以查找详细信息。

+0

我查询了两个表。我可以看到这些限制,但我无法将它们彼此联系起来。我有表PRIMARYTABLE(EMPID是主键)和OTHERTABLE(EMPID是指EPMID/PRIMARYTABLE的列)。查询SYSCST和SYSCSTCOL只是提供有关约束EPMID_PK和OTHER_FK的信息。它不会给出OTHERTABLE指的是主要信息(EMPID)。请让我知道如果我失去了一些东西。 – uSeruSher

+0

我没有用于测试的系统,但还有另一个表:SYSCSTDEP。它记录了依赖关系。 http://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/db2/rbafzcatsyscstdep.htm –

+0

也试过这个。没有去:( – uSeruSher