我正在看MERGE
声明,我不明白它的意义。
如果我错了,请纠正我,但基本上,它使目标表成为源表的相同副本。
那么从 1 个表中删除记录并简单地 INSERT INTO ... SELECT 另一个表中的所有行不是更容易吗?
MERGE 的效率有什么我遗漏的吗?
我正在看MERGE
声明,我不明白它的意义。
如果我错了,请纠正我,但基本上,它使目标表成为源表的相同副本。
那么从 1 个表中删除记录并简单地 INSERT INTO ... SELECT 另一个表中的所有行不是更容易吗?
MERGE 的效率有什么我遗漏的吗?
一条Merge
语句不会使目标表成为源表的副本,您弄错了那部分。
它提供了一种更短的方法来编写条件 DML 语句 - insert
/ update
/ delete
- 通过让您编写将执行上述 DML 语句中的一个(或任意组合)的单个语句。
然而,即使Merge
是作为单个语句编写的,SQL Server 在幕后实际上将它作为一系列语句执行——它的每个部分都得到它是一个语句——这可能会给意想不到的用户带来很多问题。
Aaron bertrand 发表了一篇关于此问题的文章,题为在 SQL Server 的 MERGE 语句中谨慎使用Merge
-在 SQL Server 中使用该语句之前,您应该仔细阅读它。
大多数时候,Merge
用于执行“upsert” - 意思是 - 如果存在则更新记录,如果不存在则插入。Aaron 对这个 SO question的回答中描述了 SQL 服务器中“upsert”的更好、更安全的模式,我强烈建议在Merge
任何可能的时候使用它。