gpt4 book ai didi

sql - SQL中 "IF EXISTS"和 "IF NOT EXISTS"之间的区别?

转载 作者:行者123 更新时间:2023-12-02 17:55:41 29 4
gpt4 key购买 nike

我对 SQL 非常陌生。我想知道当我使用“IF EXISTS”或“IF NOT EXISTS”时会发生什么。例如:以下两个语句有什么区别:

语句 1:(存在)

IF EXISTS( SELECT ORDER_ID FROM DBO.ORDER_DETAILS WHERE ORDER_ID = 11032 )
BEGIN
DELETE FROM DBO.ORDER_DETAILS WHERE ORDER_ID = 11032
END

语句 2:(不存在)

IF NOT EXISTS( SELECT ORDER_ID FROM DBO.ORDER_DETAILS WHERE ORDER_ID = 11032 )
BEGIN
DELETE FROM DBO.ORDER_DETAILS WHERE ORDER_ID = 11032
END

IF EXISTSIF NOT EXISTS 将返回什么?这两者哪个更好?何时使用 IF EXISTS 以及何时使用 IF NOT EXISTS

最佳答案

这里有 4 个示例,说明何时使用 IF EXISTS 以及何时使用 IF NOT EXISTS:

A) 从多个表中删除相关记录:

IF EXISTS (SELECT TOP(1) 1 FROM Table1 WHERE ORDER_ID = 11032) BEGIN
DELETE FROM Table1 WHERE ORDER_ID = 11032
DELETE FROM Table2 WHERE ORDER_ID = 11032
-- possibly more statements following here ...
END

B) 更新多个表中的记录(如果存在):

IF EXISTS (SELECT TOP(1) 1 FROM Table1 WHERE ORDER_ID = 11032) BEGIN
UPDATE Table1 SET Field1='X' WHERE ORDER_ID = 11032
UPDATE Table2 SET Field2='Y' WHERE ORDER_ID = 11032
-- possibly more statements following here ...
END

C) 在多个表中插入记录(如果不存在):

IF NOT EXISTS (SELECT TOP(1) 1 FROM Table1 WHERE ORDER_ID = 11032) BEGIN
INSERT INTO Table1(Field1, Field2, ORDER_ID) VALUES ('A', 'B', 11032)
INSERT INTO Table2(Field3, Field4, ORDER_ID) VALUES ('X', 'Y', 11032)
-- possibly more statements following here ...
END

D)更新插入(=插入或更新)记录,取决于是否存在:

IF EXISTS (SELECT TOP(1) 1 FROM Table1 WHERE ORDER_ID = 11032) BEGIN
UPDATE Table1 SET Field1='X' WHERE ORDER_ID = 11032
-- possibly more statements following here ...
END
ELSE BEGIN
INSERT INTO Table1(Field1, Field2, ORDER_ID) VALUES ('X', 'B', 11032)
-- possibly more statements following here ...
END

除了上面的语句(情况D),您还可以使用新的MERGE statement ,但我觉得使用起来有点复杂。

注释:

  • 如果只有一个表受到影响,则在上面的任何示例中都不会使用 EXIST,但更新插入示例 D) 中除外。
  • SELECT TOP (1) 1 FROM ... 更高效,因为它在找到第一个匹配项后中止,然后仅返回数字 1(这比选择 NVARCHAR(max) 字段更高效)
  • 您可以看到,仅在示例 C) 中您被迫使用 IF NOT EXISTS(...) ,所有其他示例都使用 IF EXISTS(...)哪个更有效率。

关于sql - SQL中 "IF EXISTS"和 "IF NOT EXISTS"之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4429741/

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