.Net Webservice API,同时多次调用,在SQL中获取重复插入而不是更新



>我有一个.net API,它将在SQL表中执行Steoredproecure和Insert或更新几列。在 API 中,这在事务中运行。

RecordID 是此表中的主键,但"客户"和"日期"字段是唯一的组合,如果它已具有具有该组合的记录,则不应有重复的记录,而应更新该记录。

我们每天要插入近 6 到 7000 条记录。有时,API 调用 SP 两次,几乎相差一毫秒。我在SP中检查如下,

SELECT  @RecordExist = Count(*) 
FROM    Records (nolock) 
WHERE   ServiceDate =   @Date
AND     CustomerAccount     =   @CustomerAccount

如果记录计数大于 0,则我正在更新它,否则插入。开始到结束它是在交易中。

不知何故,当请求同时出现多次时(每当用户更新记录并且有 5 分钟间隔的自动更新时,应用程序都会期望这样做(,上述 SP 检查无法找到记录并再次插入而不是更新记录。

数据库中有什么解决方案可以阻止这种重复吗?还是从 API 保留,直到检查完成,然后发送到更新?

如果您不太关心更新顺序,那么SQL MERGE将解决您的问题。

合并将自动插入或更新。

合并在客户和日期 - 匹配时 - 更新 当与目标插件不匹配时

应该做这个伎俩。