Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Inserir problema de simultaneidade - ambiente multithread


O truque é adicionar um WHERE à sua instrução INSERT para que INSERT funcione apenas se o item não existir, seguido pela instrução SELECT. Supondo que o registro possa ser identificado por uma coluna de ID, você escreveria:
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] 

Você não precisa colocar as instruções em uma transação porque cada instrução é executada em sua própria transação implícita. Assim, não há como dois INSERTS terem sucesso ao mesmo tempo.

EDITAR :A sintaxe INSERT ... SELECT é necessária porque o TSQL não permite uma parte VALUES e WHERE na instrução INSERT.