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) 应该还有一些更高的交易水平或 这会在未提交的级别下工作吗? 谢谢! //稍后添加 我可以假设两个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 如果您可以丢弃重复项,这是一种高度可扩展的技术 链接: >请在此处查看我的答案:Only inserting a row if it’s not already there和SQL Server 2008: INSERT if not exits,maintain unique column (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |