sql >> Base de Datos >  >> RDS >> Sqlserver

Insertar problema de simultaneidad:entorno multiproceso

El truco consiste en agregar un DONDE a su instrucción INSERT para que INSERT solo funcione si el elemento no existe, seguido de la instrucción SELECT. Suponiendo que el registro puede identificarse mediante una columna de ID, escribiría:

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] 

No necesita poner las declaraciones en una transacción porque cada declaración se ejecuta en su propia transacción implícita. Por lo tanto, no hay forma de que dos INSERCIONES tengan éxito al mismo tiempo.

EDITAR :La sintaxis INSERT ... SELECT es necesaria porque TSQL no permite una parte VALUES y WHERE en la instrucción INSERT.