Hvad med "JFDI"-mønsteret?
BEGIN TRY
INSERT etc
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627
RAISERROR etc
END CATCH
Seriøst, dette er hurtigst og mest samtidig uden låse, især ved høje lydstyrker. Hvad hvis UPDLOCK er eskaleret, og hele bordet er låst?
Læs lektion 4:
Lektion 4: Da jeg udviklede upsert-processen før tuning af indekserne, stolede jeg først på, at If Exists(Select…)
linje ville udløse for enhver vare og ville forbyde dubletter. Nada. I løbet af kort tid var der tusindvis af dubletter, fordi den samme vare ville ramme upsert på samme millisekund, og begge transaktioner ville se en ikke eksisterer og udføre indsættelsen. Efter megen test var løsningen at bruge det unikke indeks, fange fejlen og prøve igen, så transaktionen kunne se rækken og udføre en opdatering i stedet for en indsættelse.