如何在DB2中查找约束列

如何在DB2中查找约束列,db2,constraints,db2-luw,Db2,Constraints,Db2 Luw,我想知道属于每个唯一约束的列(名称)。 我可以在syscat.tabconst中轻松找到约束和表名。 但是,我找不到列名称。也许这有帮助SYSCAT.COLCHECKS 或者此SYSCAT.CHECKS 我猜您正在从索引中查找唯一约束。这是我过去用来查找特定表的查询。你应该能够根据你所寻找的来适应你所需要的: SELECT T.TABSCHEMA AS TABLE_SCHEMA ,T.TABNAME AS TABLE_NAME ,CASE T.TYPE

我想知道属于每个唯一约束的列(名称)。 我可以在syscat.tabconst中轻松找到约束和表名。
但是,我找不到列名称。

也许这有帮助<代码>SYSCAT.COLCHECKS

或者此
SYSCAT.CHECKS


我猜您正在从索引中查找唯一约束。这是我过去用来查找特定表的查询。你应该能够根据你所寻找的来适应你所需要的:

SELECT
     T.TABSCHEMA AS TABLE_SCHEMA
    ,T.TABNAME   AS TABLE_NAME
    ,CASE T.TYPE
        WHEN 'F' THEN 'Foreign Key'
        WHEN 'I' THEN 'Functional Dependency'
        WHEN 'K' THEN 'Check'
        WHEN 'P' THEN 'Primary Key'
        WHEN 'U' THEN 'Unique'
     END AS Type
    ,I.INDSCHEMA AS INDEX_SCHEMA
    ,I.INDNAME   AS INDEX_NAME
    ,U.COLNAME   AS COLUMN_NAME
    ,U.COLSEQ    AS COLUMN_ORDINAL
    ,CASE U.COLORDER 
        WHEN 'A' THEN 'Ascending'
        WHEN 'D' THEN 'Descending'
        WHEN 'I' THEN 'Included (unordered)'
     END AS COLUMN_SORRING
FROM SYSCAT.TABCONST T
JOIN SYSCAT.CONSTDEP C
  ON T.CONSTNAME = C.CONSTNAME
JOIN SYSCAT.INDEXES I 
  ON C.BSCHEMA = I.INDSCHEMA
 AND C.BNAME   = I.INDNAME
JOIN SYSCAT.INDEXCOLUSE U
  ON I.INDSCHEMA = U.INDSCHEMA
 AND I.INDNAME   = U.INDNAME
WHERE T.TABSCHEMA = @schema
  AND T.TABNAME   = @table
  AND C.BTYPE     = 'I' --Indexes Only
ORDER BY 
     T.TABSCHEMA
    ,T.TABNAME
    ,I.INDSCHEMA
    ,I.INDNAME
    ,U.COLSEQ
以下是有关表格的信息中心文章:


没有帮助。。。这些表是空的你在说什么约束?有不同的类型。你说得对。我将编辑我的问题。没有索引,没有唯一的约束。每个唯一约束由唯一索引强制执行。但是,查找约束列(PK、unique或FK)的正确位置是
SYSCAT.KEYCOLUSE