sql >> Databasteknik >  >> RDS >> Sqlserver

Infoga samtidighetsproblem - Multithreaded Environment

Tricket är att lägga till en WHERE i din INSERT-sats så att INSERT bara fungerar om objektet inte finns, följt av SELECT-satsen. Om du antar att posten kan identifieras av en ID-kolumn skulle du skriva:

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 inte lägga in uttalanden i en transaktion eftersom varje sats exekveras i sin egen implicita transaktion. Det finns alltså inget sätt att två INSLAG kommer att lyckas samtidigt.

REDIGERA :Syntaxen INSERT ... SELECT är nödvändig eftersom TSQL inte tillåter en VALUES och en WHERE-del i INSERT-satsen.



  1. Varför viloläge genererar 'T_'-prefixet tableName under infogning och borttagning?

  2. BLOB vs. VARCHAR för att lagra arrayer i en MySQL-tabell

  3. Hur konverterar man tomma utrymmen till null-värden med hjälp av SQL Server?

  4. Är pymysql-anslutningstråden säker? Är pymysql markörtråd säker?