sql >> Base de Datos >  >> RDS >> Sqlserver

Comprobación de restricciones:TRY/CATCH vs Exists()

He visto ese artículo, pero tenga en cuenta que para tasas de falla bajas, preferiría el patrón "JFDI". He usado esto en sistemas de alto volumen antes (40k filas/segundo).

En el código de Aaron, aún puede obtener un duplicado cuando prueba primero con mucha carga y muchas escrituras. (explicado aquí en dba.se ) Esto es importante:sus duplicados aún ocurren, solo que con menos frecuencia. Todavía necesita el manejo de excepciones y saber cuándo ignorar el error duplicado (2627)

Editar:explicado sucintamente por Remus en otra respuesta

Sin embargo, tendría un TRY/CATCH separado para probar solo por el error de duplicado

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