Вы понимаете, что у вас будут столкновения, верно?
вам нужно сделать что-то подобное, и это может вызвать взаимные блокировки, поэтому будьте уверены, что вы пытаетесь достичь здесь
DECLARE @id int
BEGIN TRAN
SELECT @id = MAX(id) + 1 FROM Table1 WITH (UPDLOCK, HOLDLOCK)
INSERT INTO Table1(id, data_field)
VALUES (@id ,'[blob of data]')
COMMIT TRAN
Чтобы объяснить столкновение, я предоставил код
сначала создайте эту таблицу и вставьте одну строку
CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go
Теперь откройте два окна запроса и запустите это одновременно
declare @i int
set @i =1
while @i < 10000
begin
BEGIN TRAN
INSERT INTO Table1(id, data_field)
SELECT MAX(id) + 1, '[blob of data]' FROM Table1
COMMIT TRAN;
set @i =@i + 1
end
Вы увидите кучу этих
Сервер: сообщение 2627, уровень 14, состояние 1, строка 7
Нарушение ограничения PRIMARY KEY 'PK__Table1__3213E83F2962141D'. Невозможно вставить дубликат ключа в объект 'dbo.Table1'.
Заявление было прекращено.