Když potřebujete zaručit jedinečnost záznamů za podmínky, kterou nelze vyjádřit omezením UNIKÁTNÍHO nebo PRIMÁRNÍHO KLÍČE, musíte se skutečně ujistit, že kontrola existence a vložení jsou prováděny v jedné transakci. Můžete toho dosáhnout buď:
- Použití jednoho příkazu SQL pro provedení kontroly a vložení (vaše třetí možnost)
- Použití transakce s příslušnou úrovní izolace
Existuje však čtvrtý způsob, který vám pomůže lépe strukturovat váš kód a také jej zprovozní v situacích, kdy potřebujete zpracovat dávku záznamů najednou. Můžete vytvořit proměnnou TABLE nebo dočasnou tabulku, vložit do ní všechny záznamy, které je třeba vložit, a poté na základě této proměnné napsat příkazy INSERT, UPDATE a DELETE.
Níže je (pseudo)kód demonstrující tento přístup:
-- Logic to create the data to be inserted if necessary
DECLARE @toInsert TABLE (idCol INT PRIMARY KEY,dataCol VARCHAR(MAX))
INSERT INTO @toInsert (idCol,dataCol) VALUES (1,'row 1'),(2,'row 2'),(3,'row 3')
-- Logic to insert the data
INSERT INTO realTable (idCol,dataCol)
SELECT TI.*
FROM @toInsert TI
WHERE NOT EXISTS (SELECT 1 FROM realTable RT WHERE RT.dataCol=TI.dataCol)
V mnoha situacích používám tento přístup, protože usnadňuje čtení kódu TSQL, je možné jej refaktorovat a aplikovat na něj jednotkové testy.