Rozumiesz, że będziesz mieć kolizje, prawda?
musisz zrobić coś takiego, a to może spowodować zakleszczenie, więc bądź bardzo pewien, co próbujesz tutaj osiągnąć
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
Aby wyjaśnić sprawę kolizji, udostępniłem trochę kodu
najpierw utwórz tę tabelę i wstaw jeden wiersz
CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go
Teraz otwórz dwa okna zapytań i uruchom je jednocześnie
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 [email protected] + 1
end
Zobaczysz kilka z nich
Serwer:komunikat 2627, poziom 14, stan 1, wiersz 7 Naruszenie ograniczenia klucza podstawowego „PK__Table1__3213E83F2962141D”. Nie można wstawić zduplikowanego klucza w obiekcie „dbo.Table1”. Instrukcja została zakończona.