Ska*_*ary 1 c# sql sql-server insert
我知道 SELECT + INSERT 是一种不好的做法,可能会导致竞争条件(当一些尝试实现 upsert 行为时从插入更新反模式中学到)。
但我不知道如何避免这种情况,当我只是将数据插入表中,而没有给定列(或列的元组)的重复数据时:
IF NOT EXISTS ( SELECT TOP(1) 1 FROM [tbl_myTable] WHERE [MyNotKeyField] = 'myValue' )
BEGIN
INSERT INTO [tbl_myTable] (...) VALUES (...)
END
Run Code Online (Sandbox Code Playgroud)
我应该创建一个唯一索引并尝试插入记录吗?恐怕在这种情况下,插入失败的开销可能会更大。
PS:我从客户端应用程序(与 SQL Server 连接的 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'
);
Run Code Online (Sandbox Code Playgroud)
Aaron Bertrand 有一篇关于反 UPSERT 模式的精彩文章
| 归档时间: |
|
| 查看次数: |
3037 次 |
| 最近记录: |