是否可以编写一个查询,自动从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。别的?
答案 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的权利。
但为什么你真的需要这种信息呢?在大海捞针寻找针?