是否有查询选择名称存储在另一个表中的列?

时间:2014-10-20 09:05:32

标签: sql select teradata

我有两个表 - tblColName和tblData

tblColNames包含我想要选择的tblData列的名称列表。

tblColNames
-----------
Var1
Var2
Var8
Var9

我只想从tblData中选择名称存在于tblColNames中的列。

是否有Teradata SQL查询来执行此操作?

1 个答案:

答案 0 :(得分:2)

对于此任务,您必须使用动态SQL。所需的命令将在一个过程中调用,基本上如下所示(这是我曾经写过的DB2示例,但原则应该在任何方言中都相似):

CREATE OR REPLACE PROCEDURE DYNAMIC_TABLE_ACCESS
(IN TableName VARCHAR(40), IN ColName VARCHAR(40))
DYNAMIC RESULT SETS 1
READS SQL DATA
LANGUAGE SQL
SPECIFIC DYNAMIC_TABLE_ACCESS
BEGIN
        DECLARE V_DYNAMIC VARCHAR(200);
        DECLARE V_SQL VARCHAR(200);

        DECLARE V_CUR CURSOR WITH RETURN TO CALLER FOR V_DYNAMIC;

        SET V_SQL='SELECT ' CONCAT ColName CONCAT ' AS ColName FROM ' CONCAT TableName;

        PREPARE V_DYNAMIC FROM V_SQL;
        OPEN V_CUR;
END

我们的想法是创建一个字符串V_SQL,其中包含带有动态选择的列名和表名的SQL语句,然后通过PREPAREOPEN游标调用命令。

因此,您会在屏幕上看到指定列和表格的条目。