У меня есть .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 удерживать, пока проверка не будет выполнена, а затем отправлена на обновление?