You can improve concurrency notation with keyboard shortcuts
INSERT INTO mytable (serial_no, value) SELECT MAX (serial_no)+1, @value FROM mytable WITH (ROWLOCK, XLOCK, HOLDLOCK)
If performance is not important, try TABLOCKX instead of ROWLOCK, XLOCK
However, given that this is unsafe, you need to try again
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
Or go to the IDENTITY column and do it right ...
gbn
source share