Jon*_*ler 32
使用首选的JOIN表示法:
SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column
FROM "informix".systables AS t
JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
WHERE t.tabtype = 'T'
AND t.tabid >= 100
ORDER BY t.tabname, c.colno;
Run Code Online (Sandbox Code Playgroud)
或老式的join-in-where-clause符号:
SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column
FROM "informix".systables AS t, "informix".syscolumns AS c
WHERE t.tabid = c.tabid
AND t.tabtype = 'T'
AND t.tabid >= 100
ORDER BY t.tabname, c.colno;
Run Code Online (Sandbox Code Playgroud)
假设您使用的是最新版本的IDS,则可以按选择列表中未引用的列进行排序.如果您收到投诉,请将订购列添加到选择列表中.
连接标准是显而易见的; tabtype ='T'仅列出表格,而不列出systables中列出的视图,同义词和其他此类项目; tabid> = 100仅列出在数据库中显式创建的表,而不是系统目录.
这不包括类型信息 - 如果你想要,你必须做更多的工作.您将找到一个文件$INFORMIXDIR/etc/xpg4_is.sql,其中包含旧版XPG4(X/Open标准)信息模式的粗略近似值(因此文件名).在那里,有功能等,以从解码类型信息syscolumns.coltype和syscolumns.collength为可识别的字符串.但是,我强烈怀疑它不处理DISTINCT类型,也不处理其他用户定义的类型.我很高兴被证明是错误的,但是......如果你将该文件的相关部分添加到数据库中,那么你应该也能获得类型信息.
另请注意,ISQL和DB-Access中的所有INFO命令都在前端进行模拟,而不是在IDS服务器中执行.基本上,程序接受请求并将其转换为更复杂的SQL语句.请参阅sqlinfo.ecSQLCMD 文件中的代码(可从IIUG软件存档获取),了解我的SQLCMD程序如何处理INFO语句.(注意:SQLCMD的INFO输出格式与ISQL和DB-Access的INFO输出不同.)