合并与删除并插入 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
上使用它。
我正在查看 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
上使用它。