Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Inserisci problema di concorrenza - Ambiente multithread

Il trucco consiste nell'aggiungere un WHERE all'istruzione INSERT in modo che INSERT funzioni solo se l'elemento non esiste, seguito dall'istruzione SELECT. Supponendo che il record possa essere identificato da una colonna ID, scriveresti:

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] 

Non è necessario inserire le istruzioni in una transazione perché ogni istruzione viene eseguita nella propria transazione implicita. Pertanto, non è possibile che due INSERT riescano contemporaneamente.

MODIFICA :La sintassi INSERT ... SELECT è necessaria perché TSQL non consente una parte VALUES e una parte WHERE nell'istruzione INSERT.