0

是否可以编写一个查询,从 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%'

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

4

1 回答 1

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 的行。

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

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

于 2013-08-05T10:32:13.607 回答