合并与删除并插入 select

MERGE vs delete and insert into select

我正在查看 MERGE 声明,但我不明白其中的意义。

如果我错了请纠正我,但基本上,它使目标 table 成为源 table 的相同副本。

那么,从 1 table 中删除记录并简单地从另一个中插入... SELECT 中的所有行不是更容易吗?

我在 MERGE 的效率方面是否遗漏了什么?

Merge 语句不会使目标 table 成为源 table 的副本,你弄错了那部分。

它提供了一种更短的方式来编写条件 DML 语句 - insert / update / delete - 通过让您编写一个语句来执行其中一个(或任何组合) of) 以上 DML 语句。

然而,即使 Merge 被编写为单个语句,在幕后 SQL 服务器实际上将其作为一系列语句执行 - 它的每个部分都得到它的一个语句 - 而这可能会给意想不到的用户带来很多问题。
Aaron bertrand 发表了一篇关于此的文章,标题为 Use Caution with SQL Server's MERGE Statement - 在 SQL 服务器中使用 Merge 语句之前,您应该通读它。

大多数时候,Merge 用于执行 "upsert" - 意思是 - 如果存在则更新记录,如果不存在则插入。 SQL 服务器中 "upsert" 的更好、更安全的模式在 Aaron 对 this SO question 的回答中有所描述,我强烈建议在可能的情况下在 Merge 上使用它。