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

前端之家收集整理的这篇文章主要介绍了sql-server – Sql Server 2005 – 如果不存在则插入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
互联网上有很多关于这个常见“问题”的信息.

解决方案如:

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 thereSQL Server 2008: INSERT if not exits,maintain unique column
>如果您还需要UPDATE:Which is the best choice in delete-insert vs if-update else-insert?

猜你在找的MsSQL相关文章