T-SQL - 存储过程 - “IF EXISTS”与“WHERE EXISTS”

问题描述 投票:0回答:1

这样写比较好:

IF EXISTS (SELECT ...) OR EXISTS (SELECT ...)
  BEGIN
    INSERT INTO myTable
    VALUES ('myValue1', 'myValue1')
  END

或者写:

INSERT INTO myTable
SELECT 'myValue1', 'myValue1'
WHERE EXISTS (SELECT ...) OR EXISTS (SELECT ...)

我的意思是在性能和可读性方面更好。

sql-server t-sql stored-procedures if-statement where-clause
1个回答
6
投票

您应该使用后者,这并不是真正的效率问题(我怀疑两者之间没有显着差异),而是最不可能满足竞争条件。如果两个插入同时运行,则在使用第一种方法时,在检查值是否存在和实际执行插入之间,另一个线程极有可能插入同一条记录。由于检查和插入都是使用后者中的相同锁来完成的,因此这种情况不太可能发生。

因此,在我看来,就准确性和线程安全性而言,可读性和性能都远远落后于第二位。

© www.soinside.com 2019 - 2024. All rights reserved.