DB2 找到引用我的 table 的 table

DB2 find tables that reference my table

[db2-as400] 我有一个 table ENR_DATAEnrollmentID 作为主键。此专栏被许多 table 称为 "foreign key"。有没有办法列出所有引用 ENR_DATA table 的 EnrollmentID 的 table?

IBM i (AS 400) 上的 DB2 提供 list of all system tables, the system catalog. It is the place where metadata is stored. One of the views, SYSCST, is the view with all constraints, the view SYSCSTCOL has information about the constraint columns, and SYSCSTDEP 存储依赖项。

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

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

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

从这三个table我们可以写出下面的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' 的 table 名称。请注意,我的 ENROLLMENTID 全部大写。这就是 DB2 for i 存储所有列名的方式,除非使用“”引用它们。