我仍然有点像菜鸟,所以请原谅这个问题是否有点明显。我确实在寻找答案,但要么无法理解我找到的答案如何应用,要么根本找不到答案。
我在DB2 for i服务器上有一个庞大的数据库,我通过SQLExplorer(基于Squirrel SQL)使用SQL访问它。这些表格的记录非常糟糕,第一项业务就是弄清楚如何找到自己的方式。
我想编写一个执行此操作的简单查询:
1)允许我搜索整个数据库,查找包含名为“备注”列的表格(其中包含字段说明)。
2)然后,我希望它在该列中搜索关键字。
3)我想要一个返回的表,其中包含包含该关键字的表的名称(只是名称,我可以稍后按字母顺序查找表格并查看如果我需要,请在里面。)
我需要这个搜索超轻量级,我希望我描述的概念能实现这一目标。任何占用大量资源的东西都可能会激怒服务器的系统管理员。
只是为了表明我已经尝试过(而且我是一个完整的菜鸟),这就是我到目前为止所做的。
SELECT *
FROM <dbname>
WHERE Remarks LIKE '<keyword>'
随意嘲笑,我告诉你我是个白痴:-)。
有任何帮助吗?也许至少是朝着正确的方向发展?
PS - 我似乎无法在SQLExplorer中找到搜索功能,如果有人知道我是否可以使用简单的搜索或过滤器来实现同样的目标......那就太好了。
答案 0 :(得分:6)
您可以查询系统目录以识别表格:
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 predicate。
答案 1 :(得分:1)
通常我会使用类似的东西
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
答案 2 :(得分:0)
通常,如果不是大多数IBM i商店(特别是那些使用RPG的商店),很多人都会使用10个(或更少)字符模式名称&amp;表名,并且“系统”列名称具有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%'