Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Verificação de restrições:TRY/CATCH vs Exists()


Eu vi esse artigo, mas observe que, para baixas taxas de falha, prefiro o padrão "JFDI". Eu usei isso em sistemas de alto volume antes (40k linhas/segundo).

No código de Aaron, você ainda pode obter uma duplicata ao testar primeiro sob carga alta e muitas gravações. (explicado aqui em dba.se ) Isso é importante:suas duplicatas ainda acontecem, apenas com menos frequência. Você ainda precisa de tratamento de exceção e saber quando ignorar o erro duplicado (2627)

Edit:explicado sucintamente por Remus em outra resposta

No entanto, eu teria um TRY/CATCH separado para testar somente para o erro 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