为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM7
【操作系统】:docker
【CPU】: docker
【问题描述】*:
SQL 语句:
SELECT TAB.NAME TABLE_NAME ,
COLS.NAME COLUMN_NAME,
COLS.TYPE$ DATA_TYPE,
SF_COL_IS_IDX_KEY(INDS.KEYNUM, INDS.KEYINFO, COLS.COLID) COLUMN_KEY ,
CASE COLS.INFO2 WHEN '1' THEN 'auto_increment' ELSE '' END EXTRA,
NULL COLLATION_NAME,
COLS.COLID,
concat(cols.TYPE$,'(',COLS.LENGTH$,')') COLUMN_TYPE
FROM(SELECT ID,
SCHID,
NAME
FROM SYS.SYSOBJECTS
WHERE TYPE$ = 'SCHOBJ' AND SUBTYPE$ = 'UTAB') TAB
LEFT JOIN SYS.SYSCOLUMNS COLS
on TAB.ID=COLS.ID
LEFT JOIN (SELECT ID, PID, NAME FROM SYS.SYSOBJECTS WHERE SUBTYPE$='INDEX') OBJ_INDS
on TAB.ID = OBJ_INDS.PID
LEFT JOIN SYS.SYSINDEXES INDS
on INDS.ID= OBJ_INDS.ID
WHERE TAB.SCHID = (SELECT ID FROM SYS.SYSOBJECTS WHERE TYPE$ = 'SCH' AND NAME = 'SYSDBA' ) and (INDS.XTYPE
& 0x01) = 1
ORDER BY COLS.COLID
STUDENT 表结构:
SC 表结构:
执行结果:
可以看到只能查询到STUDENT的表结构,不能查询到SC的表结构,发现是因为SC表没有主键的原因;
请问如何修改SQL语句来适应,可查询到所有表结构。
SELECT TAB.NAME TABLE_NAME ,
COLS.NAME COLUMN_NAME,
COLS.TYPE$ DATA_TYPE,
--SF_COL_IS_IDX_KEY(INDS.KEYNUM, INDS.KEYINFO, COLS.COLID) COLUMN_KEY ,
CASE COLS.INFO2 WHEN '1' THEN 'auto_increment' ELSE '' END EXTRA,
NULL COLLATION_NAME,
COLS.COLID,
concat(cols.TYPE$,'(',COLS.LENGTH$,')') COLUMN_TYPE
FROM(SELECT ID,
SCHID,
NAME
FROM SYS.SYSOBJECTS
WHERE TYPE$ = 'SCHOBJ' AND SUBTYPE$ = 'UTAB' and name not in ('##HISTOGRAMS_TABLE','##PLAN_TABLE') and name not like 'BAK_DMINI%') TAB
LEFT JOIN SYS.SYSCOLUMNS COLS
on TAB.ID=COLS.ID
LEFT JOIN (SELECT ID, PID, NAME FROM SYS.SYSOBJECTS WHERE SUBTYPE$='INDEX') OBJ_INDS
on TAB.ID = OBJ_INDS.PID
LEFT JOIN SYS.SYSINDEXES INDS
on INDS.ID= OBJ_INDS.ID
WHERE TAB.SCHID = (SELECT ID FROM SYS.SYSOBJECTS WHERE TYPE$ = 'SCH' AND NAME = 'SYSDBA' ) --and (INDS.XTYPE& 0x01) = 1
ORDER BY TAB.NAME,COLS.COLID