sql >> Databáze >  >> RDS >> Sqlserver

Je možné implementovat ruční přírůstek pomocí jednoduchého SQL INSERT?

Chápete, že budete mít kolize?

musíte udělat něco takového a mohlo by to způsobit uváznutí, takže si buďte velmi jisti, čeho se zde snažíte dosáhnout

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

Abych vysvětlil tu kolizi, poskytl jsem nějaký kód

nejprve vytvořte tuto tabulku a vložte jeden řádek

CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go

Nyní otevřete dvě okna dotazu a spusťte to současně

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

Uvidíte spoustu těchto

Server:Zpráva 2627, úroveň 14, stav 1, řádek 7 Porušení omezení PRIMARY KEY 'PK__Table1__3213E83F2962141D'. Do objektu 'dbo.Table1' nelze vložit duplicitní klíč. Příkaz byl ukončen.



  1. Převod Oracle join na Ansi join

  2. jak udělit oprávnění uživatele ke konkrétnímu schématu?

  3. MySQL Workbench:Jak udržet připojení naživu

  4. pravé spojení rovná se levé spojení?