【问题标题】:Syntax error in Merge statement SQLMerge 语句 SQL 中的语法错误
【发布时间】:2018-02-26 21:32:30
【问题描述】:

我对此还有两个问题,但这个问题更集中。 Merge 语句的基本结构如下所示。为了时间和篇幅,我总结了一些细节。本来我打算尝试将8合并为1。那是一次徒劳的冒险,所以我缩小了范围。对于这个,我正在尝试结合行业 21 和行业 4,知道有 8 行主键重复。主键是由 9 个字段组成的复合键(不确定是否相关)。它们是 13 个外键。

通过查看下面的代码,有人能明白为什么我会在第一个粗体项上的 = 符号上得到不正确的语法。接下来在同一条粗线上,为什么当我将鼠标悬停在 .在同一行的 source 和 periodtype 之间,我是否收到有关“合并语句必须在列中终止”的错误

Merge industry4 AS TARGET
USING industry21 as SOURCE
ON (target.primarykey1 = Source.primarykey1) or (target.primarykey2 = 
Source.primarykey2) or.....  (target.primarykey9 = Source.primarykey9)

--When records are matched, update 
--the records if there is any change

WHEN MATCHED AND
TARGET.foreignkey1 <> SOURCE.foreignkey1
OR .... TARGET.foreignkey13 <> SOURCE.foreignkey2
THEN
UPDATE SET TARGET.pk1 = SOURCE.pk1,
TARGET.pk2 = SOURCE.pk2
**TARGET.periodtype(pk5) = SOURCE.periodtype (pk5)**
.....
TARGET.fk13 = SOURCE.fk13

--When no records are matched, insert
--the incoming records from source
--table to target table

WHEN NOT MATCHED BY TARGET THEN
INSERT (fieids 1-22)
VALUES (SOURCE.pk1, SOURCE.pk2......SOURCE.fk13)
WHEN NOT MATCHED BY SOURCE THEN 
DELETE

【问题讨论】:

    标签: merge insert sql-update ssms target


    【解决方案1】:

    我能够使用以下代码完成任务。它与我最初的问题无关,但显然合并语句不是最好的也不流行的方法。

    SELECT x.* 
    INTO [NEW_TABLE]
    FROM (SELECT * FROM TABLE1
    UNION
    SELECT * FROM TABLE2) x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多