我还是有点傻,所以如果这个问题有点明显,请原谅。我确实搜索了一个答案,但要么不明白我找到的答案是如何应用的,要么就是找不到答案。
我在DB2fori服务器上有一个庞大的数据库,我正在通过SQLExplorer(基于SquirrelSQL)使用SQL访问该数据库。这些表格记录得很差,首要任务是弄清楚如何找到我的方法。
我想写一个简单的查询来做到这一点:
1)允许我在整个数据库中搜索包含名为"备注"(包含字段描述)列的表。
2)然后我希望它在该列中搜索关键字。
3)我想要一个返回的表,其中包括包含该关键字的表的名称(只有名称,我可以稍后按字母顺序查找表,如果需要,可以查看内部。)
我需要这个搜索是超轻量级的,我希望我描述的概念能实现这一点。任何消耗大量资源的行为都可能激怒服务器的系统管理员。
只是为了表明我已经尝试过了(而且我是个十足的傻瓜),以下是我迄今为止的收获。
SELECT *
FROM <dbname>
WHERE Remarks LIKE '<keyword>'
随意嘲笑,我告诉过你我是个白痴:-)。
有什么帮助吗?也许至少是朝着正确的方向推动?
PS-我似乎在SQLExplorer中找不到搜索功能,如果有人知道我是否可以使用简单的搜索或过滤器来实现同样的目标。。。那太好了。
您可以查询系统目录来识别表:
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM QSYS2.SYSCOLUMNS WHERE UPPER(DBILFL) = 'REMARKS'
然后分别查询每个表:
SELECT * FROM TABLE_SCHEMA.TABLE_NAME WHERE Remarks LIKE '%<keyword>%'
有关模式表达式的详细信息,请参阅LIKE谓词。
通常我使用类似的东西
SELECT TABLE_SCHEMA, TABLE_NAME
,COLUMN_NAME,SYSTEM_COLUMN_NAME,COLUMN_HEADING
,DATA_TYPE, "LENGTH",NUMERIC_SCALE
FROM QSYS2.SYSCOLUMNS
WHERE UPPER(COLUMN_NAME) LIKE '%REMARK%'
@JamesA,我在V6R1,默认情况下,普通用户无权在QSYS 中反对QADBIFLD
通常,即使不是大多数IBM i商店(尤其是那些使用RPG的商店),也会坚持使用10个(或更少)字符的模式名称&表名,并且具有10个字符(或更少)的"系统"列名,即使还提供了更长的列名。列文本通常描述每个字段。
SELECT SYSTEM_TABLE_SCHEMA, SYSTEM_TABLE_NAME
,SYSTEM_COLUMN_NAME,
,DATA_TYPE, "LENGTH",NUMERIC_SCALE
,CHAR(COLUMN_TEXT)
FROM QSYS2.SYSCOLUMNS
WHERE UPPER(COLUMN_NAME) LIKE '%REMARK%'