这样写比较好:
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 ...)
我的意思是在性能和可读性方面更好。
您应该使用后者,这并不是真正的效率问题(我怀疑两者之间没有显着差异),而是最不可能满足竞争条件。如果两个插入同时运行,则在使用第一种方法时,在检查值是否存在和实际执行插入之间,另一个线程极有可能插入同一条记录。由于检查和插入都是使用后者中的相同锁来完成的,因此这种情况不太可能发生。
因此,在我看来,就准确性和线程安全性而言,可读性和性能都远远落后于第二位。