Widziałem ten artykuł, ale zauważ, że w przypadku niskich wskaźników awaryjności wolę wzór „JFDI”. Używałem tego wcześniej w systemach o dużej objętości (40 tys. wierszy na sekundę).
W kodzie Aarona nadal można uzyskać duplikat podczas testowania najpierw pod dużym obciążeniem i dużą ilością zapisów. (wyjaśnione tutaj na dba.se ) To ważne:duplikaty nadal się zdarzają, tylko rzadziej. Nadal potrzebujesz obsługi wyjątków i wiedzy, kiedy zignorować błąd duplikatu (2627)
Edycja:wyjaśnione zwięźle przez Remusa w innej odpowiedzi
Miałbym jednak oddzielny TRY/CATCH do testowania tylko za duplikat błędu
BEGIN TRY
-- stuff
BEGIN TRY
INSERT etc
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627
RAISERROR etc
END CATCH
--more stuff
BEGIN CATCH
RAISERROR etc
END CATCH