MSDN:
一、MERGE 语句最多可以有两个 WHEN MATCHED 子句。如果指定了两个子句,则第一个子句必须同时带有一个 AND <search_condition> 子句。对于任何给定的行,只有在未应用第一个 WHEN MATCHED 子句的情况下,才会应用第二个 WHEN MATCHED 子句。如果有两个 WHEN MATCHED 子句,那么其中的一个必须指定 UPDATE 操作,而另一个必须指定 DELETE 操作。如果在 <merge_matched> 子句中指定了 UPDATE,并且根据 <merge_search_condition>,<table_source> 中的多个行与 target_table 中的某一行匹配,则 SQL Server 将返回错误。MERGE 语句无法多次更新同一行,也无法更新和删除同一行。
二、自己的理解:根据<merge_search_condition>,在<source_table>中对应有多条的记录,而在<target_table>中只有一条,那么将会报错:
MERGE 语句试图多次更新或删除同一行。目标行与多个源行匹配时会出现这种情况。MERGE 语句无法多次更新/删除目标表的同一行。请简化 ON 子句,以确保目标行最多与一个源行匹配,也可以使用 GROUP BY 子句对源行分组。
所以除了上面的那种情况下,其他情况都是正确的。
下面是SQL语句:
本文介绍了SQL2008中的MERGE语句使用心得,包括最多两个WHEN MATCHED子句的限制,以及当源表有多条记录与目标表单条记录匹配时可能导致的错误。通过示例展示了如何创建和使用MERGE语句,以及如何处理操作日志。强调了在使用MERGE时,应确保目标行最多与一个源行匹配,避免多次更新或删除同一行。

6547

被折叠的 条评论
为什么被折叠?



