DB2查找引用我的表的表

时间:2017-01-09 21:29:14

标签: db2 ibm-midrange db2-400

[db2-as400]我有一个表ENR_DATA,其中列EnrollmentID为主键。此列被许多表称为“外键”。有没有办法列出所有引用EnrollmentID ENR_DATA表{?}}的表格?

2 个答案:

答案 0 :(得分:2)

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

  • 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存储所有列名的方式,除非使用""。

引用它们

答案 1 :(得分: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以查找详细信息。