我正在运行一个存储过程,它选择我的临时表的值并将它们插入到数据库中,如下所示:
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 - 存储过程 + 不使用事务 + JDBC 可调用语句
在 SELECT 和随后的 INSERT 之间是否会发生另一个对相同/不同存储过程的调用,该调用完成了具有相似数据的 INSERT?如果是这样,防止这种情况的最佳方法是什么?
一些想法:我们有许多重复的“客户端”实例在生产中一次与这个 SQL Server 通信,所以我的第一反应是并发问题,但我自己似乎无法复制它。这是我最好的猜测,但到目前为止还没有。这不会发生在我们的暂存环境中,与生产环境相比,负载微不足道。这是我开始研究并发问题的主要原因。