Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Vérification des contraintes :TRY/CATCH vs Exists()

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