gpt4 book ai didi

sql-server - 与简单的 IF EXISTS 相比,MERGE 的优势是什么?

转载 作者:行者123 更新时间:2023-12-02 15:36:12 24 4
gpt4 key购买 nike

我想知道 MERGE 相对于简单地使用 IF EXISTS 有什么优势。建议的方法是什么? MERGE 是否逐行执行 Update 和 Insert 匹配条件?如果有,是不是类似于Cursors?

最佳答案

MERGE 将 INSERT、UPDATE 和 DELETE 逻辑组合到一个 DML 语句中,因此是原子的。如果您正在执行单行 UPSERTS,那么优势就不那么明显了。例如,UPSERT 的简单实现可能如下所示:

IF  EXISTS (SELECT * FROM t1 where id=@id)
UPDATE t1 SET ... WHERE id=@id
ELSE
INSERT INTO t1 (...) VALUES (...)

但是,如果不将其包装在事务中,我们要更新的行可能会在 SELECT 和 UPDATE 之间被删除。添加最少的逻辑来解决这个问题给我们这个:

BEGIN TRAN
IF EXISTS (SELECT * FROM t1 WITH (HOLDLOCK, UPDLOCK) where id=@id )
UPDATE t1 SET ... WHERE id=@id
ELSE
INSERT INTO t1 (...) VALUES (...)
COMMIT

MERGE 语句不需要此逻辑。

在 CURSORS 和 MERGE 语句之间不应该进行比较。

关于sql-server - 与简单的 IF EXISTS 相比,MERGE 的优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17199094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com