-1

我在 Visual Studio SSIS 中构建它 - 我有两个表,每个表有三个字段。一张表是我加载每日值的临时表,另一张是生产表。我想获取每日临时表,如果记录存在于 prod 表中,我想通过将 prod 表中已有的值添加到来自 temp 表的值来更新汇总值。下面是我认为可以工作的代码,但我收到“错误:创建更新 EMS 摘要表中的 0xC002F210,执行 SQL 任务:执行查询“合并 EMSComplianceTrnSummary 作为使用 EMSE 的目标...”的错误,并出现以下错误: "MERGE 语句中使用的插入列列表不能包含多部分标识符。"

有什么帮助来完成这项工作吗?

SQL 代码:

MERGE EMSComplianceSummary as target
USING EMSComplianceSummaryTemp as source ON (target.key = source.key)
WHEN MATCHED THEN
  UPDATE SET target.sumtoon = target.sumtoon + source.sumtoon,
             target.summoving = target.summoving + source.summoving
WHEN NOT MATCHED THEN
  INSERT (target.trainkey, target.sumtoon, target.summoving)
  VALUES (source.trainkey, source.sumtoon, source.summoving)
4

3 回答 3

1

MERGE语句的第一行标识目标表是什么EMSComplianceSummary,然后将其别名为目标。因此,在您的 MERGE 语句的 INSERT 部分中不需要或不允许使用它

MERGE EMSComplianceSummary as target
USING EMSComplianceSummaryTemp as source ON (target.key = source.key)
WHEN MATCHED THEN
  UPDATE SET target.sumtoon = target.sumtoon + source.sumtoon,
             target.summoving = target.summoving + source.summoving
WHEN NOT MATCHED THEN
  INSERT (trainkey, sumtoon, summoving)
  VALUES (source.trainkey, source.sumtoon, source.summoving);

我还添加了一个分号作为语句终止符,因为它是必需的。

MERGE 语句需要分号 (;) 作为语句终止符。在没有终止符的情况下运行 MERGE 语句时会引发错误 10713。

于 2013-05-01T16:12:46.603 回答
0

听起来您需要删除“目标”。从插入列表中的每一列。它已经知道您正在插入目标。

于 2013-05-01T16:02:48.103 回答
0

在 Merge 语句的开头和结尾处添加分号。我知道,开头的逗号不是强制性的(如 ;with CTE 语句),但过去对我有帮助。

于 2013-05-03T00:17:47.257 回答