Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Insérer un problème de simultanéité - Environnement multithread

L'astuce consiste à ajouter un WHERE à votre instruction INSERT afin que INSERT ne fonctionne que si l'élément n'existe pas, suivi de l'instruction SELECT. En supposant que l'enregistrement puisse être identifié par une colonne ID, vous écririez :

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] 

Vous n'avez pas besoin de placer les instructions dans une transaction car chaque instruction est exécutée dans sa propre transaction implicite. Ainsi, il n'y a aucun moyen que deux INSERTS réussissent en même temps.

MODIFIER :La syntaxe INSERT ... SELECT est nécessaire car TSQL n'autorise pas les parties VALUES et WHERE dans l'instruction INSERT.