这里有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
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
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)
END
D) 根据记录的存在与否,进行插入或更新操作。
IF EXISTS (SELECT TOP(1) 1 FROM Table1 WHERE ORDER_ID = 11032) BEGIN
UPDATE Table1 SET Field1='X' WHERE ORDER_ID = 11032
END
ELSE BEGIN
INSERT INTO Table1(Field1, Field2, ORDER_ID) VALUES ('X', 'B', 11032)
END
除了上述陈述(案例D)外,您还可以使用新的MERGE语句,但我认为它有点复杂。
注意事项:
- 如果只有一个表受影响,您在上面的任何示例中都不会使用EXIST,除非在upsert示例D)中。
- SELECT TOP(1) 1 FROM ...更有效,因为它在找到第一个匹配项后中止,然后仅返回数字1(这比选择例如NVARCHAR(max)字段更有效)
- 您可以看到只有在示例C)中,您被迫使用
IF NOT EXISTS(...)
,所有其他示例都使用IF EXISTS(...)
这更有效。