Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DB2表';s唯一索引未显示在TABCONST和CONSTDEP表中_Sql_Db2_Database Metadata_System Tables_Rapidsql - Fatal编程技术网

Sql DB2表';s唯一索引未显示在TABCONST和CONSTDEP表中

Sql DB2表';s唯一索引未显示在TABCONST和CONSTDEP表中,sql,db2,database-metadata,system-tables,rapidsql,Sql,Db2,Database Metadata,System Tables,Rapidsql,我正在尝试使用下面的查询从SYSCAT表中查询一些用户表的唯一索引,该查询使用了4个目录表(索引,索引,TABCONST,constep)。我意识到所有索引都存在于索引和索引列表中,但其中许多索引在TABCONST和constep表中缺失 TABCONST和constep表中缺少数据有什么原因吗?是否有一些过程来刷新这些目录表中的数据 SELECT T.TABSCHEMA AS TABLE_SCHEMA, T.TABNAME AS TABLE_NAME, CASE T.T

我正在尝试使用下面的查询从
SYSCAT
表中查询一些用户表的唯一索引,该查询使用了4个目录表(
索引
索引
TABCONST
constep
)。我意识到所有索引都存在于
索引
索引列
表中,但其中许多索引在
TABCONST
constep
表中缺失

TABCONST
constep
表中缺少数据有什么原因吗?是否有一些过程来刷新这些目录表中的数据

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
    INNER JOIN
    SYSCAT.CONSTDEP C
    ON T.CONSTNAME = C.CONSTNAME
    INNER JOIN
    SYSCAT.INDEXES I
    ON
        C.BSCHEMA = I.INDSCHEMA AND
        C.BNAME = I.INDNAME
    INNER JOIN
    SYSCAT.INDEXCOLUSE U
    ON
        I.INDSCHEMA = U.INDSCHEMA AND
        I.INDNAME = U.INDNAME
WHERE
    TRIM(UPPER(T.TABSCHEMA)) = 'MYSCHEMA' AND
    TRIM(UPPER(T.TABNAME)) = 'MYTABLE'AND
    C.BTYPE = 'I'
--INDICES ONLY
ORDER BY
    T.TABSCHEMA,
    T.TABNAME,
    I.INDSCHEMA,
    I.INDNAME
;
笔记
编辑问题的标题:忘了提到这是关于唯一索引而不是仅仅索引

直接创建索引时,它不是约束:

CREATE UNIQUE INDEX myindex on mytab(mycol)

但是,如果您创建或更改一个表,并使用
UNIQUE
声明一个或多个列,那么它就是一个约束。

主表应该是syscat.index/indexcoluse,然后左键连接到syscat.tabconst/constep。非常感谢,我刚才假设UNIQUE索引和约束总是可以互换的(只是出于实际原因)我们错误地期望在所有4个表中找到元数据。这有一些有趣的项目。