首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不存在Server插入

如果不存在Server插入
EN

Stack Overflow用户
提问于 2021-03-30 08:15:39
回答 1查看 737关注 0票数 0

我知道SELECT + INSERT是一种错误的做法,可能会导致争用条件(当一些人试图实现重新插入行为时,从insert-update反模式中学到的)。

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

代码语言:javascript
复制
IF NOT EXISTS ( SELECT TOP(1) 1 FROM [tbl_myTable] WHERE [MyNotKeyField] = 'myValue' )
BEGIN
     INSERT INTO [tbl_myTable] (...) VALUES (...)
END

我是否应该创建一个唯一的索引,然后尝试插入记录呢?我担心在这种情况下,失败的insert的开销可能会更高。

PS:我从客户端应用程序(与Server连接的C#应用程序)发送该命令,因此我认为临时表和合并的使用是不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-30 08:21:36

EXISTSINSERT相结合

例如

代码语言:javascript
复制
INSERT INTO [tbl_myTable] (...) 
SELECT @val1, @val2 ...
WHERE NOT EXISTS
(
    SELECT 1 FROM [tbl_myTable] WITH (UPDLOCK, SERIALIZABLE)
    WHERE [MyNotKeyField] = 'myValue'
);

Aaron Bertrand有一个关于反UPSERT模式的伟大的职位

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66867130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档