我正在使用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.
非常感谢。
答案 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
的对象(如变量)的存在会破坏测试。
此继续处理程序将屏蔽范围内缺少的列的任何其他错误,因此最好将范围限制为您想要执行的测试。