Разбирате, че ще имате сблъсъци, нали?
трябва да направите нещо подобно и това може да доведе до блокиране, така че бъдете много сигурни какво се опитвате да постигнете тук
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 [email protected] + 1
end
Ще видите куп от тези
Сървър:Msg 2627, ниво 14, състояние 1, ред 7, нарушение на ограничението на PRIMARY KEY „PK__Table1__3213E83F2962141D“. Не може да се вмъкне дублиран ключ в обект „dbo.Table1“. Изявлението е прекратено.