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

Indsæt samtidighedsproblem - Multithreaded Environment

Tricket er at tilføje en WHERE til din INSERT-sætning, så INSERT kun virker, hvis elementet ikke findes, efterfulgt af SELECT-sætningen. Hvis du antager, at posten kan identificeres med en ID-kolonne, ville du skrive:

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] 

Du behøver ikke at lægge erklæringerne i en transaktion, fordi hver erklæring udføres i sin egen implicitte transaktion. Der er således ingen måde, at to INSERTS vil lykkes på samme tid.

REDIGER :INSERT ... SELECT-syntaksen er nødvendig, fordi TSQL ikke tillader en VALUES og en WHERE-del i INSERT-sætningen.



  1. PHP bindParam virker ikke med en PARAM_INT ud parameter

  2. SQL-forespørgsel for at gøre en kolonne med tal til en streng

  3. Flere kolonneværdier i en enkelt række

  4. Hvordan opdaterer man datoer gemt som forskellige tegnformater (PL/SQL)?