Du verstehst, dass es Kollisionen geben wird, richtig?
Sie müssen so etwas tun, und dies kann zu Deadlocks führen. Seien Sie sich also sehr sicher, was Sie hier erreichen möchten
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
Um die Kollisionssache zu erklären, habe ich etwas Code bereitgestellt
erstelle zuerst diese Tabelle und füge eine Zeile ein
CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go
Öffnen Sie nun zwei Abfragefenster und führen Sie diese gleichzeitig aus
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
Sie werden eine Reihe davon sehen
Server:Nachricht 2627, Ebene 14, Status 1, Zeile 7, Verletzung der PRIMARY KEY-Einschränkung „PK__Table1__3213E83F2962141D“. Doppelter Schlüssel kann nicht in Objekt „dbo.Table1“ eingefügt werden. Die Anweisung wurde beendet.