雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名

Posted

技术标签:

【中文标题】雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名【英文标题】:Snowflake Database: Want to use value from a column in a table as a column name in select statement for another table 【发布时间】:2020-09-11 12:21:20 【问题描述】:

我用的是雪花

CREATE OR REPLACE PROCEDURE test1(TBLNM varchar)
RETURNS VARCHAR(16777216) not null
LANGUAGE javascript
$$

var sql_cmd = "SELECT col1 FROM TBLNM ;
var ins = `insert into tabl2 (column1) SELECT  :1
      FROM table1 `
;

var stmt = snowflake.createStatement(
         
         sqlText: sql_cmd
         
      );
  var res = stmt.execute(); 
  
  while (res.next())  
       var column1 = res.getColumnValue(1);
   
   ins_stmt=snowflake.execute(
                
                sqlText: ins, 
                binds: [column1]                
                
                );   
   
 
$$

例如,在 TBLNM 中,我有 3 行值,例如 col1

    姓名 姓氏 等级

我在这里尝试的是,来自 TBLNM 的值“名称”应被视为表 1 的选择语句中的列名以获取值

插入表 2(列 1)从表 1 中选择名称。

这应该在表中插入人名,例如: 第 1 列

    彼得 帕克 第 5 次

但它正在插入“名称”作为值。它将“名称”视为文本。

列 1

名称 姓 等级

请帮助我将绑定变量视为列名而不是字符串。

【问题讨论】:

【参考方案1】:

您可以使用 Javascript 连接而不是绑定变量。

这对我有用:

CREATE OR REPLACE PROCEDURE test1(TBL_NAME varchar, COL_NAME varchar)
RETURNS VARCHAR(16777216) not null
LANGUAGE JAVASCRIPT
AS
  $$
    var stmt = snowflake.createStatement(
     
      sqlText: `SELECT ` + COL_NAME + ` FROM ` + TBL_NAME
     );
   var res = stmt.execute(); 

   while (res.next())  
    var column1 = res.getColumnValue(1);
    var ins_stmt = snowflake.createStatement(
     
      sqlText: `INSERT INTO table2 SELECT ` + column1 + ` FROM table1`
    );
    var res_ins = ins_stmt.execute(); 
   
  $$;
call test1('store', 'col1');

这里也有一些例子:

https://community.snowflake.com/s/article/Snowflake-Introduces-Javascript-Stored-Procedures

问候,

【讨论】:

以上是关于雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名的主要内容,如果未能解决你的问题,请参考以下文章

更新查询以根据另一表中的值更改一个表中列的现有值

表中列的唯一值组合

MySQL:如何根据从另一个表中选择的值填充现有表的新列[关闭]

雪花我们如何遍历临时表的每一行并将其值插入到另一个表中,其中每个字段的值都是单行?

Toad 问题:Oracle 类型作为显示所有记录的表中列的数据类型

SQL Server 表未显示表中列的值