sql >> Database >  >> RDS >> Sqlserver

Mogelijk om een ​​handmatige increment te implementeren met een simpele SQL INSERT?

Je begrijpt dat je botsingen zult krijgen, toch?

je moet zoiets doen en dit kan impasses veroorzaken, dus wees er zeker van wat je hier probeert te bereiken

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

Om het botsingsgedoe uit te leggen, heb ik een code gegeven

maak eerst deze tabel en voeg een rij in

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

Open nu twee queryvensters en voer dit tegelijkertijd uit

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

Je zult er een heleboel zien

Server:Msg 2627, niveau 14, staat 1, regel 7 Schending van PRIMARY KEY-beperking 'PK__Table1__3213E83F2962141D'. Kan geen dubbele sleutel invoegen in object 'dbo.Table1'. De instructie is beëindigd.



  1. MySQL-injecties vermijden met de klasse Zend_Db

  2. SQL Zoek duplicaat met meerdere velden (geen unieke ID) WORK AROUND

  3. PostgreSQL Regex-woordgrenzen?

  4. Codeigniter:verbinding met een SQL-server instellen (2008)