Wir sind ein Team von SQL-Server-Datenbankentwicklern. Unsere Kunden sind eine bunte Mischung aus C#/ASP.NET, C#- und Java-Webdiensten, Java/Unix-Diensten und etwas Excel.
Unsere Kundenentwickler verwenden nur gespeicherte Prozeduren, die wir zur Verfügung stellen, und wir erwarten, dass sie diese (sofern sinnvoll) wie Webdienstmethoden behandeln.
Einige Entwickler unserer Kunden mögen keine SQL-Ausnahmen. Sie verstehen sie in ihren Sprachen, aber sie wissen nicht zu schätzen, dass SQL bei der Kommunikation von Problemen eingeschränkt ist.
Ich meine nicht nur SQL-Fehler, wie z.B. der Versuch, "bob" in eine int-Spalte einzufügen.
Ich meine damit auch Ausnahmen, wie z. B. die Mitteilung, dass ein Referenzwert falsch ist, dass sich die Daten bereits geändert haben oder dass dies nicht möglich ist, weil das Aggregat nicht Null ist.
Sie haben nicht wirklich konkrete Alternativen: Sie haben erwähnt, dass wir Parameter ausgeben sollten, aber wir gehen davon aus, dass eine Ausnahme "Verarbeitung gestoppt/zurückgestellt" bedeutet.
Wie gehen die Leute hier mit dem Datenbank-Client-Vertrag um? Entweder allgemein oder wo es eine Trennung zwischen der DB und Client-Code-Affen.
Bearbeitungen:
- wir verwenden ausschließlich SQL Server 2005 TRY/CATCH
- wir protokollieren alle Fehler nach dem Rollback bereits in einer Ausnahmetabelle
- Wir befürchten, dass einige unserer Kunden die Ausgangsparameter nicht überprüfen und davon ausgehen, dass alles in Ordnung ist. Wir brauchen eine Fehlermeldung, damit der Support sie sich ansehen kann.
- alles ist eine Ausnahme... von den Clients wird erwartet, dass sie die Nachrichten analysieren, um Informationen von Fehlern zu unterscheiden. Um unsere Ausnahmen von DB-Engine und Aufruffehler zu trennen, sollten sie die Fehlernummer verwenden (unsere sind alle 50.000 natürlich)