Вы можете улучшить параллелизм записи с помощью подсказок блокировки
INSERT INTO mytable (serial_no, value)
SELECT MAX (serial_no)+1, @value
FROM mytable WITH (ROWLOCK, XLOCK, HOLDLOCK)
Если производительность не важна, попробуйте TABLOCKX вместо ROWLOCK, XLOCK
Однако, учитывая, что это также не безопасновам нужно повторить попытку
DECLARE @retry bit
SET @retry = 1
WHILE @Retry = 1
BEGIN
BEGIN TRY
INSERT INTO mytable (serial_no, value)
SELECT MAX (serial_no)+1, @value
FROM mytable WITH (ROWLOCK, XLOCK, HOLDLOCK)
SET @Retry = 0
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627 --PK violation
RAISERROR ('blah', 16, 1)
END CATCH
END
или перейти к столбцу IDENTITY и сделать это правильно ...