J'ai vu cet article, mais notez que pour les faibles taux d'échec, je préférerais le modèle "JFDI". Je l'ai déjà utilisé sur des systèmes à volume élevé (40 000 lignes/seconde).
Dans le code d'Aaron, vous pouvez toujours obtenir un doublon lorsque vous testez d'abord sous une charge élevée et de nombreuses écritures. (expliqué ici sur dba.se ) C'est important :vos doublons se produisent toujours, mais moins souvent. Vous avez toujours besoin de gérer les exceptions et de savoir quand ignorer l'erreur de doublon (2627)
Edit :expliqué succinctement par Remus dans une autre réponse
Cependant, j'aurais un TRY/CATCH séparé pour tester uniquement pour l'erreur de doublon
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