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.