加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – Sql Server 2005 – 如果不存在则插入

发布时间:2020-12-12 07:07:09 所属栏目:MsSql教程 来源:网络整理
导读:互联网上有很多关于这个常见“问题”的信息. 解决方案如: IF NOT EXISTS() BEGIN INSERT INTO (...) END 在我看来并不是线程安全的,你可能会同意. 但是你可以确认将exists存入一个select的where子句会解决sql引擎中最高并发性的问题吗? 够了吗? insert int
互联网上有很多关于这个常见“问题”的信息.

解决方案如:

IF NOT EXISTS() BEGIN INSERT INTO (...) END

在我看来并不是线程安全的,你可能会同意.

但是你可以确认将exists存入一个select的where子句会解决sql引擎中最高并发性的问题吗?
够了吗?

insert into Table (columns)
select column1,column2,column3
where not exists (select top 1 1 from Table where something)

应该还有一些更高的交易水平或
这可以在默认的一个上执行:commit?

这会在未提交的级别下工作吗?

谢谢!

//稍后添加

我可以假设两个sql’都是正确的:

1)
设置事务隔离级别可重复读取

IF NOT EXISTS() BEGIN INSERT INTO (...) END

2)设置事务隔离级别可重复读取

insert into Table (columns)
select column1,column3
where not exists (select top 1 1 from Table where something)

解决方法

使用TRY / CATCH可以避免额外的读取
BEGIN TRY
   INSERT etc
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() <> 2627
      RAISERROR etc
END CATCH

> NOT EXISTS将读取表格,无论是在IF还是WHERE
> INSERT需要读取以检查唯一性

如果您可以丢弃重复项,这是一种高度可扩展的技术

链接:

>请在此处查看我的答案:Only inserting a row if it’s not already there和SQL Server 2008: INSERT if not exits,maintain unique column
>如果您还需要UPDATE:Which is the best choice in delete-insert vs if-update else-insert?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读