将值参数化为来自另一个 table 的雪花查询
Parametrizing values to a snowflake query from another table
我正在尝试参数化更新查询,如下所示从雪花 table 读取值。
雪花查询 :
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 |
+----------+------------+------------+--------------+
上面 table - franchise
、acct_type
和 pref_lang
中 col_name
的值是我的 tgtTable
的实际列尝试根据上面 Snowflake query
.
中 srcTable
的 old_val
和 new_val
进行更新
但我运行进入SQL编译错误:语法错误
有人可以帮我提供这种方法的解决方案吗?提前致谢。
您不能参数化 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 语句。
我正在尝试参数化更新查询,如下所示从雪花 table 读取值。
雪花查询 :
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 |
+----------+------------+------------+--------------+
上面 table - franchise
、acct_type
和 pref_lang
中 col_name
的值是我的 tgtTable
的实际列尝试根据上面 Snowflake query
.
srcTable
的 old_val
和 new_val
进行更新
但我运行进入SQL编译错误:语法错误
有人可以帮我提供这种方法的解决方案吗?提前致谢。
您不能参数化 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 语句。