java如何确保唯一约束_INSERT INTO .. SELECT ..唯一约束违规

我正在运行一个存储过程,它选择值我的临时表并将它们插入到数据库中,如下所示:

INSERT INTO emails (EmailAddress) (

SELECT

DISTINCT eit.EmailAddress

FROM #EmailInfoTemp eit

LEFT JOIN emails ea

ON eit.EmailAddress = ea.EmailAddress

WHERE ea.EmailAddressID IS NULL )

在极少数情况下(〜每隔几个小时在服务器上每分钟处理数千个请求),然后我会在EmailAddress列的索引上收到唯一约束错误“违反UNIQUE KEY约束 ..” .

我可以确认我没有传递重复的值 . 即使我是,它应该被DISTINCT捕获 .

-SQL Server 2008 -Stored proc不使用事务JDBC callablestatement

可能发生在SELECT和随后的INSERT之间,还有另一个调用相同/不同的存储过程,它完成了一个具有类似数据的INSERT?如果是这样,那么防止这种情况的最佳方法是什么?

一些想法:我们有很多重复的“客户”实例,他们在 生产环境 中同时与这一个SQL Server进行通信,所以我的第一反应是并发问题,但我似乎无法自己复制它 . 这是我最好的猜测,但它到目前为止无处可去 . 在我们的临时环境中,这种情况不会发生,因为与 生产环境 环境相比,负载是无关紧要的 . 这是我开始研究并发问题的主要原因 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值