一张表上的 SQL 合并命令

Bar*_*osz 3 sql merge sql-server-2008

我试图让我的头脑在MERGEsql 语句上。我想要实现的是:

插入新的值插入CSScolorOrders表中,但更新corQuantity列,如果与记录colIDordID已经存在

这就是我最终的结果:

MERGE INTO CSScolorOrders AS TARGET 
USING (SELECT * FROM CSScolorOrders WHERE ordID = 3) AS SOURCE 
ON (SOURCE.colID = 1) WHEN 
MATCHED THEN UPDATE SET corQuantity = 1 
WHEN
  NOT MATCHED BY TARGET
  THEN INSERT (colID, ordID, corQuantity) VALUES (1, 3, 1);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它没有引发任何异常,所以我不知道为什么它不起作用。

Jam*_*213 6

正如此处所讨论的,您将看到合并与听起来完全一样。拿两个表并搜索您加入它们的值,我们称之为“X”。如果 X 匹配,则您对该记录执行更新。如果它不存在,那么您将使用选定的值在目标表上执行插入。

在你的情况下,我不完全确定你是否加入

  (  ON (SOURCE.colID = 1)   )
Run Code Online (Sandbox Code Playgroud)

是正确的。我很确定这需要

on(Source.colID = Target.colID)
Run Code Online (Sandbox Code Playgroud)

所以完整的声明应该是这样的:

MERGE INTO CSScolorOrders AS TARGET 
USING (SELECT * FROM CSScolorOrders WHERE ordID = 3) AS SOURCE 
on(Source.colID = Target.colID)
WHEN MATCHED THEN 
  UPDATE SET corQuantity = 1 
WHEN NOT MATCHED BY TARGET
  THEN INSERT (colID, ordID, corQuantity) VALUES (1, 3, 1);
Run Code Online (Sandbox Code Playgroud)

但我还没有对此进行测试,也不能 100% 确定您的表列是什么以及您尝试加入的究竟是什么。但是我提供的链接应该指向正确的方向。

希望这可以帮助!