![](/img/trans.png)
[英]SQL Server stored procedure - check if ANY records exist, and insert if not
[英]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 是不可能的。
将EXISTS
与INSERT
结合
例如
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.