Это было рассмотрено ранее, но вот некоторые общие идеи:
Добавить UNIQUE INDEX
покрытие Location, CaseNumber
. Это предотвратит дуплексы в случае сбоя проверки параллелизма.
Инкапсулируйте ваш код для проверки / вставки нового максимального значения в транзакцию. Это не красиво, но как вы можете убедиться, что не будет проблем с параллелизмом.
... * то есть 1009 *
DECLARE @Max int
BEGIN TRAN
SET @Max = (SELECT MAX(CaseNumber) FROM MyTable WITH (TABLOCK)
WHERE Location = @Location) + 1
INSERT INTO MyTable
@Location, @Max
COMMIT TRAN