自动选择数据库和列以及搜索数据

时间:2013-08-01 13:24:04

标签: metadata teradata

是否可以编写一个查询,自动从Teradata中的dbc.Columns表中选择所有数据库名称和列名,并搜索一组特定的值?

值集:

WHERE abc in (1,2,3)

选择dbc.columns:

SELECT DatabaseName, TableName FROM dbc.COLUMNS
WHERE ColumnName LIKE '%abc%'

如何组合它并创建一个只返回DatabaseName和TableName组合的查询,其中ColumnName具有特定的值子集?

更新:

此查询查找所有数据库 - 列组合:

SELECT TRIM(BOTH FROM a.DatabaseName) || '.' || TRIM( BOTH FROM a.TableName)
FROM dbc.COLUMNS AS a
WHERE ColumnName LIKE '%abc%'

是否可以定义一些变量或sthg。别的?

1 个答案:

答案 0 :(得分:1)

您需要编写像

这样的动态SQL语句
SELECT 
   'SELECT ''' || DatabaseName || '.' || TableName || '.' || ColumnName || ''''
   ' WHERE EXISTS (SELECT * FROM ' || DatabaseName || '.' || TableName ||
   ' WHERE ' || ColumnName || ' IN (1,2,3));' 
FROM dbc.ColumnsVX
WHERE ColumnName LIKE '%abc%';

运行生成的查询将返回一个结果集,每个表包含零行或一行。

要获得单个结果集,您需要使用游标在dbc.columnsVX结果上写入存储过程(添加INSERT INTO temptable),每行EXECTE IMMEDIATE。最后返回temptable的行。

除非您是经验丰富的SQL程序员,否则您的DBA不会授予您创建SP的权利。

但为什么你真的需要这种信息呢?在大海捞针寻找针?

相关问题