Alex Kuznetsov hat ein großartiges Kapitel in seinem Buch Defensive Database Programming (Kapitel 8), das sich mit T-SQL TRY ... CATCH, T-SQL-Transaktionen und SET XACT_ABORT-Einstellungen sowie der clientseitigen Fehlerbehandlung befasst. Es wird Ihnen sehr bei der Entscheidung helfen, welche der Optionen für das, was Sie erreichen müssen, am sinnvollsten ist.
Es ist kostenlos auf dieser Website verfügbar . Ich bin in keiner Weise mit dem Unternehmen verbunden, aber ich besitze die gedruckte Version dieses Buches.
Es gibt viele kleine Details zu diesem Thema, die von Alex sehr gut erklärt werden.
Per Nicks Bitte ... (aber nicht alles ist im Kapitel)
In Bezug auf die Skalierung müssen Sie brutal ehrlich sein, welche Aktivitäten im Datenbankcode enthalten sein müssen und welche in der App enthalten sein sollten. Haben Sie jemals bemerkt, wie schnell ausführender Code dazu neigt, für ein einzelnes Problem pro Methode zu entwerfen?
Die einfachste Art der Kommunikation wären benutzerdefinierte Fehlercodes (> 50.000). Es ist auch ziemlich schnell. Dies bedeutet, dass Sie den Datenbankcode und den App-Code synchron halten müssen. Mit einem benutzerdefinierten Fehlercode können Sie auch nützliche Informationen in der Fehlermeldung zurückgeben. Da Sie ausschließlich für diese Situation einen Fehlercode haben, können Sie einen Parser in den App-Code schreiben, der auf das Datenformat des Fehlers zugeschnitten ist.
Welche Fehlerbedingungen erfordern eine Wiederholungslogik in der Datenbank? Wenn Sie es nach X Sekunden erneut versuchen möchten, sollten Sie dies besser im App-Code behandeln, damit die Transaktion nicht so stark blockiert. Wenn Sie einen DML-Vorgang nur sofort erneut senden, kann es effizienter sein, ihn im SP zu wiederholen. Beachten Sie jedoch, dass Sie möglicherweise Code duplizieren oder eine Ebene von SPs hinzufügen müssen, um einen erneuten Versuch durchzuführen.
Wirklich, das ist derzeit der größte Schmerz bei der TRY ... CATCH-Logik in SQL Server. Es kann getan werden, aber es ist ein bisschen dumm. Suchen Sie in SQL Server 2012 nach einigen Verbesserungen, insbesondere nach erneuten Auslösen von Systemausnahmen (unter Beibehaltung der ursprünglichen Fehlernummer). Außerdem gibt es FORMATMESSAGE , die eine gewisse Flexibilität beim Erstellen von Fehlermeldungen bietet, insbesondere für Protokollierungszwecke.