Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Constraints-Check:TRY/CATCH vs Exists()

Ich habe diesen Artikel gesehen, aber beachten Sie, dass ich für niedrige Fehlerraten das "JFDI" -Muster bevorzugen würde. Ich habe dies zuvor auf Systemen mit hohem Volumen verwendet (40.000 Zeilen/Sekunde).

In Aarons Code können Sie immer noch ein Duplikat erhalten, wenn Sie zuerst unter hoher Last und vielen Schreibvorgängen testen. (hier erklärt auf dba.se ). ) Dies ist wichtig:Ihre Duplikate treten immer noch auf, nur seltener. Sie müssen immer noch Ausnahmebehandlungen durchführen und wissen, wann Sie den Duplikatfehler (2627) ignorieren müssen

Bearbeiten:kurz und bündig erklärt von Remus in einer anderen Antwort

Ich hätte jedoch ein separates TRY/CATCH zum Testen nur für den doppelten Fehler

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