【问题标题】:Parametrizing values to a snowflake query from another table将值参数化为来自另一个表的雪花查询
【发布时间】:2021-10-08 04:15:55
【问题描述】:

我正在尝试对读取雪花表中的值的更新查询进行参数化,如下所示。

雪花查询:

update tgtTable set @col_name = @newVal
from srcTable
where lower(@col_name) = @old_val

srcTable:

+----------+------------+------------+--------------+ 
|col_name  |modified_dt |old_val     |new_val       |
+----------+------------+------------+--------------+
|franchise |2021-02-05  |NDDA Boston |NCRT Colo     |
|acct_type |2021-04-13  |Chk         |Sav           |
|pref_lang |2021-05-25  |Eng-UK      |Eng-US        |
+----------+------------+------------+--------------+

上表中col_name 的值-franchise、acct_type 和pref_lang 是tgtTable 的实际列,我试图根据old_val 和srcTable 的new_val 对其进行更新在上面Snowflake query.

但是我遇到了SQL 编译错误:语法错误

有人可以帮助我为这种方法提供解决方案吗?提前致谢。

【问题讨论】:

  • 你在哪里运行这个查询?为什么是“@”?
  • 我正在尝试在 Snowflake 中运行此查询。我尝试在查询中对来自 srcTable 的 col_name、old_val 和 new_val 进行参数化,但没有奏效....
  • 你可以试试不带@吗?
  • SQL 执行器在实际执行之前应该知道它应该返回什么。这就是为什么参数不能代替静态 SQL 中的 SQL 语句部分

标签: sql snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

您不能在 SQL 中对列名进行参数化。您的选择是对列名进行硬编码并分别为每列运行 SQL

update tgtTable T set T.franchise = S.new_val
from srcTable S
where S.col_name = 'franchise' and T.franchise = S.old_val;

或者,您可以编写存储过程并动态构建 SQL 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多