当有多个键列时如何形成Merge查询?

How to form the Merge query when there are multiple key columns?

在雪花数据库上,我正在尝试 运行 合并 table:PK_TABLE_TEST。这个table DDL如下:

CREATE OR REPLACE TABLE "LOAD".pk_table_test (
     RESORT STRING NOT NULL, 
     STAYDATE DATE NOT NULL, 
     RATE_CODE STRING NOT NULL, 
     RNS NUMBER (38, 0), 
     GST NUMBER (38, 0), 
     REVENUE FLOAT, 
     REPORT_DATE DATE NOT NULL,
     SYS_INS_DATE timestamp,
     PRIMARY KEY (RESORT),
     UNIQUE(RESORT, STAYDATE, RATE_CODE, REPORT_DATE)
);

我的登台数据库中有相同的 table,名称为:pk_table_test_stg。 在我的存储过程中,我通过从 INFORMATION_SCHEMA 获取所有键来形成合并查询。下面是合并查询:

MERGE INTO LOAD.PK_TABLE_TEST target USING LOAD.PK_TABLE_TEST_STG stg ON target.RESORT = stg.RESORT and target.STAYDATE = stg.STAYDATE and target.RATE_CODE = stg.RATE_CODE and target.REPORT_DATE = stg.REPORT_DATE WHEN MATCHED THEN UPDATE SET target.RESORT = stg.RESORT,target.STAYDATE = stg.STAYDATE,target.RATE_CODE = stg.RATE_CODE,target.RNS = stg.RNS,target.GST = stg.GST,target.REVENUE = stg.REVENUE,target.REPORT_DATE = stg.REPORT_DATE,target.SYS_INS_DATE = '2020-10-10 4:35:24'; WHEN NOT MATCHED THEN INSERT (RESORT,STAYDATE,RATE_CODE,RNS,GST,REVENUE,REPORT_DATE,SYS_INS_DATE) VALUES (stg.RESORT,stg.STAYDATE,stg.RATE_CODE,stg.RNS,stg.GST,stg.REVENUE,stg.REPORT_DATE,stg.SYS_INS_DATE);

但是当我 运行 查询时,它说 unexpected WHEN

SQL Error [1003] [42000]: SQL compilation error:
syntax error line 2 at position 272 unexpected 'WHEN'.

我形成的查询有语法错误吗?当 ON 条件中有多个列时,它是正确的语法吗? 谁能告诉我如何解决这个问题?感谢任何帮助。

您的查询中有一个分号:

target.SYS_INS_DATE = '2020-10-10 4:35:24';如果不匹配则插入

尝试删除这个:-)

有关语法(看起来正确)的更多信息可在此处找到:https://docs.snowflake.com/en/sql-reference/sql/merge.html