Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Parallelitätsproblem einfügen – Multithread-Umgebung

Der Trick besteht darin, Ihrer INSERT-Anweisung ein WHERE hinzuzufügen, sodass INSERT nur funktioniert, wenn das Element nicht existiert, gefolgt von der SELECT-Anweisung. Angenommen, der Datensatz kann durch eine ID-Spalte identifiziert werden, würden Sie schreiben:

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] 

Sie müssen die Anweisungen nicht in eine Transaktion einfügen, da jede Anweisung in einer eigenen impliziten Transaktion ausgeführt wird. Daher ist es unmöglich, dass zwei INSERTS gleichzeitig erfolgreich sind.

BEARBEITEN Hinweis:Die INSERT ... SELECT-Syntax ist erforderlich, da TSQL keinen VALUES- und WHERE-Teil in der INSERT-Anweisung zulässt.