繁体   English   中英

SQL 服务器插入(如果不存在)

[英]SQL Server Insert if not exist

我知道 SELECT + INSERT 是一种不好的做法,可能会导致竞争条件(当一些尝试实施 upsert 行为的人从 insert-update 反模式中学到)。

但是我不知道如何避免这种情况,因为我只是在表中插入数据,而给定列(或列的元组)没有重复:

IF NOT EXISTS ( SELECT TOP(1) 1 FROM [tbl_myTable] WHERE [MyNotKeyField] = 'myValue' )
BEGIN
     INSERT INTO [tbl_myTable] (...) VALUES (...)
END

我应该创建一个唯一索引并尝试插入记录吗? 恐怕在这种情况下,插入失败的开销可能会更高。

PS:我从客户端应用程序(与 SQL 服务器连接的 C# 应用程序)发送该命令,所以我认为临时表和使用 MERGE 是不可能的。

EXISTSINSERT结合

例如

INSERT INTO [tbl_myTable] (...) 
SELECT @val1, @val2 ...
WHERE NOT EXISTS
(
    SELECT 1 FROM [tbl_myTable] WITH (UPDLOCK, SERIALIZABLE)
    WHERE [MyNotKeyField] = 'myValue'
);

Aaron Bertrand 有一篇关于反 UPSERT 模式的 精彩文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM