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

时间:2013-12-19 09:00:31

标签: sql-server tsql stored-procedures if-statement where

写作是否更好:

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 ...)

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

Pileggi

1 个答案:

答案 0 :(得分:6)

你应该使用后者,而不是效率问题(我怀疑两者之间没有显着差异),但最不可能遇到race condition。如果两个插入并发运行,则在使用第一个方法时,另一个线程在检查值是否存在以及实际执行插入之间是否插入相同记录的可能性很小。由于检查和插入都使用后者中的相同锁完成,因此不太可能发生。

因此,在我看来,对于准确性和线程安全的重要性,可读性和性能都是非常遥远的第二。