API веб-службы .Net, несколько вызовов одновременно, получение дублирующих вставок в SQL вместо обновления - PullRequest
0 голосов
/ 24 мая 2018

У меня есть .net API, который выполняет Steoredproecure и Insert в таблицу SQL или обновляет несколько столбцов.В API это выполняется в транзакции.

RecordID является первичным ключом, хранящимся в этой таблице, но поля Customer и Date являются уникальной комбинацией и не должны содержать дублирующихся записей, а обновляться, если у них уже есть запись с этой комбинацией.

Ежедневно мы получаем от 6 до 7 тысяч записей.Иногда API вызывает SP дважды с разницей в миллисекунды.У меня есть проверка SP, как показано ниже:

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

Если количество записей больше 0, то я обновляю его, в противном случае вставьте.От начала до конца он находится в транзакции.

Почему-то, когда запрос приходит несколько раз в одно и то же время (это ожидается от приложения, когда пользователь обновляет запись и происходит автоматическое обновление с интервалом в 5 минут), вышеупомянутая проверка SP:не в состоянии найти записи и собирается вставить их снова вместо обновления записи.

Любое решение из базы данных, чтобы остановить этот дубликат?Или из API удерживать, пока проверка не будет выполнена, а затем отправлена ​​на обновление?

1 Ответ

0 голосов
/ 24 мая 2018

Если вас не слишком беспокоит последовательность обновлений, тогда SQL MERGE решит вашу проблему.

Слияние будет автоматически вставлено или обновлено.

Слияние на Cust & Date - при совпадении - Обновление при отсутствии совпадения с целевой вставкой

Должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...