DB2:如何查找表或表列表中是否存在列?

时间:2012-01-05 14:04:20

标签: sql db2

我正在使用DB2数据库。什么是合适的SQL查询来查明表或表列表中是否存在列?

例如

if "column_name" is found in "table name" or [list of table names]

return true or the name of tables that have that column.

非常感谢。

3 个答案:

答案 0 :(得分:8)

在DB2 z / OS 9.1和LUW 9.7上测试:

SELECT STRIP(TBCREATOR) || '.' || STRIP(TBNAME)
FROM SYSIBM.SYSCOLUMNS 
WHERE NAME = 'your_col'
  AND TBNAME IN ('list', 'of', 'tables')

如果您只想要特定架构的结果,可以在查询末尾添加AND TBCREATOR = 'your_schema'

答案 1 :(得分:5)

使用SYSCAT.COLUMNS catalog view

SELECT TABNAME
FROM SYSCAT.COLUMNS
WHERE 
    TABNAME IN ('table name 1', 'table name 2') AND 
    COLNAME = 'column_name';

答案 2 :(得分:0)

另一种方法是使用错误处理:

declare v_sql varchar(1000);
declare col_missing integer default 0;
declare col_does_not_exist condition for sqlstate '42703';
declare continue handler for col_does_not_exist set col_missing = 1;

set v_sql = 'select table.foo from table';
execute immediate v_sql;

if col_missing = 1 then
    --Do something if column foo doesn't exist.
end if;

此方法适用于会话表,即使您不知道它是表,视图,别名等,也可以在对象上使用它。

指定table.foo而不仅仅是列名是很重要的,否则另一个名为foo的对象(如变量)的存在会破坏测试。

此继续处理程序将屏蔽范围内缺少的列的任何其他错误,因此最好将范围限制为您想要执行的测试。