Если вы правильно его кодируете, вы сможете получить из этого тот же параллелизм, что и с решением IDENTITY. Это не интуитивно понятно; Можно подумать, что блокировка уменьшит параллелизм. Но я провел несколько тестов с пятью различными соединениями, которые разбили стол, и доказал себе, что трюк MAX + 1 работает примерно так же, как IDENTITY. Вы можете увидеть обсуждение в первом разделе следующего сообщения в блоге:
https://sqlblog.org/2009/10/12/bad-habits-to-kick-making-assumptions-about-identity
В любом случае, вот синтаксис, который я рекомендую (я не очень доверяю модели INSERT ... VALUES (SUBQUERY), извините):
DECLARE @NextID INT;
BEGIN TRANSACTION;
SELECT @NextID = COALESCE(MAX(NumberColumn), 0) + 1
FROM dbo.TableA WITH (UPDLOCK);
INSERT dbo.TableA SELECT @NextID;
COMMIT TRANSACTION;
Вы должны будете представить части обработки ошибок (опущены для краткости), но я думаю, что вы получите дрейф.
Конечно, не принимайте это за Евангелие. Вам нужно будет запустить тесты на своем оборудовании, используя ваши данные и шаблоны доступа, чтобы определить, будет ли вреден параллелизм этим методом. Это вполне может быть один из тех ответов "это зависит".