我在SQL Server中有一个存储过程,它检查来自移动设备的重复订单。如果设备没有得到服务器的响应,设备将在大约1/2秒内重试。即使已插入副本,也很有可能无法读取副本。在提交插入的数据时,SQL Server可能会延迟1/2秒吗?是开始使用脏读的解决方案吗?
答案 0 :(得分:1)
看起来你正在进入race condition。
即
Time SP Call 1 SP Call 2
0.00 Dup Exists?
0.10 ... Dup Exists?
0.20 No No
0.30 Insert New ...
0.40 Insert New
您是否可以在数据上放置一个唯一索引来防止重复,而不是对重复项进行过程检查?
答案 1 :(得分:0)
在我看来,使用脏读不是一个解决方案。唯一性应通过约束或在某些情况下使用之前(或代替)触发器来实现。如果没有关于什么程序的详细信息,我不能给出更具体的建议,但我相信可以通过在存储过程体中使用可序列化的隔离级别来解决问题。另外,您可以考虑使用rowversion列来避免丢失更新问题。