T-SQL - 存储过程 - "IF EXISTS"与"WHERE EXISTS"

lam*_*ora 3 t-sql sql-server stored-procedures if-statement where

写作更好:

IF EXISTS (SELECT ...) OR EXISTS (SELECT ...)
  BEGIN
    INSERT INTO myTable
    VALUES ('myValue1', 'myValue1')
  END
Run Code Online (Sandbox Code Playgroud)

或者写:

INSERT INTO myTable
SELECT 'myValue1', 'myValue1'
WHERE EXISTS (SELECT ...) OR EXISTS (SELECT ...)
Run Code Online (Sandbox Code Playgroud)

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

Pileggi

Gar*_*thD 6

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

所以在我看来,就准确性和线程安全的重要性而言,可读性和性能都是非常遥远的第二.