一张表上的 SQL 合并命令

标签 sql sql-server-2008 merge

我正在努力让我的头脑清醒 MERGE sql语句。我想要实现的是:

将新值插入 CSScolorOrders表但更新corQuantity如果记录带有 colID 的列和 ordID已经存在

这就是我最终的结果:

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);

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

最佳答案

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

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

  (  ON (SOURCE.colID = 1)   )

是正确的。我很确定这需要
on(Source.colID = Target.colID)

所以完整的声明应该是这样的:
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);

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

希望这可以帮助!

关于一张表上的 SQL 合并命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741622/

相关文章:

java - Restful Web 服务 - 维护外键

sql - 性能调整SQL-如何?

Mercurial push 在 merge 后创建新的远程头

Git双向 merge

mysql - 双连接的结果太多

SQL Server 使用外键创建表的不同方式

sql - 您如何使用 SSMS 在 SQL Server 2008 R2 View 中发表评论?

sql-server-2008 - Sql Server 2008 调整大事务(700k+ 行/事务)

xml - 在 Xml 变量中存储查询结果时如何保留 CDATA 标记?

arrays - 如何减少R中数组的维数