sql >> Database >  >> RDS >> Sqlserver

Probleem met gelijktijdigheid invoegen - omgeving met meerdere threads

De truc is om een ​​WHERE aan je INSERT-statement toe te voegen, zodat INSERT alleen werkt als het item niet bestaat, gevolgd door het SELECT-statement. Stel dat het record kan worden geïdentificeerd door een ID-kolom, dan zou je schrijven:

INSERT INTO MyTable (ID,Col1,Col2,...) 
SELECT @IDValue,@Col1Value,@Col2Value, ...
WHERE NOT EXISTS (SELECT ID  
              FROM MyTable 
              WHERE [email protected]) 

SELECT *  
FROM MyTable 
Where [email protected] 

U hoeft de afschriften niet in een transactie te plaatsen, omdat elk afschrift in een eigen impliciete transactie wordt uitgevoerd. Het is dus onmogelijk dat twee INSERTS tegelijkertijd zullen slagen.

BEWERKEN :De INSERT ... SELECT-syntaxis is nodig omdat TSQL geen VALUES en een WHERE-gedeelte toestaat in de INSERT-instructie.



  1. Alle rijen uit een tabel verwijderen, behalve de nieuwste 10 rijen

  2. pdo update-instructie met concat werkt niet

  3. Mysql Max met Groeperen op zoekopdracht

  4. Wat zijn de prestaties van de Merge-clausule in SQL Server 2008?