ukulele
Datenbank-Guru
- Beiträge
- 5.059
Ich habe im Moment die Situation das ich viel mit After-Triggern arbeite. Allerdings erweißt sich das in vielen Situationen als problematisch und unperformant., ich würde daher gerne Instead-of-Trigger verwenden. Hierzu habe ich aber mal noch Fragen die mir noch nicht ganz klar sind.
Erstmal ein Beispielszenario:
Tabelle T hat eine Spalte für eine E-Mail Adresse, eine für die Domain und eine für die TLD. Wird nun eine E-Mail Adresse eingetragen wurden bisher im Nachgang zwei Trigger abgefeuert. Trigger A hat geprüft, ob das Format der E-Mail Adresse gültig ist. War z.B. kein @ enthalten wurde die Operation mit ROLLBACK anuliert und mit RAISERROR eine Entsprechende Meldung ausgeben. Trigger B hat aus der E-Mail Adresse nachträglich die Domain und die TLD ermittelt, sofern diese nicht bereits vorhanden waren, und in die vorgesehenen Spalten geschrieben.
Das Szenario ist natürlich stark vereinfacht, kommt aber so in unterschiedlichsten Ausprägungen in vielen meiner Tabellen vor. Wenn ich diese beiden Prozesse jetzt per Instead-of und / Check-Constraint lösen will ergeben sich folgende Fragen:
1) Kann ich z.B. zwei verschiedene Instead-of-Insert Trigger anwenden? Wenn ja, in welcher Reihenfolge werden sie ausgeführt?
2) Wer MSSQL kennt weiß, das Trigger immer nur einmal pro Update-Statement feuern. Ist das bei Instead-of-Triggern genauso?
3) Ich könnte mir überlegen, jede einzelne Prüfroutine und jeden automatisch ermittelten Wert per Funktion an Default- und Check-Constraints zu hängen. Kann ich bei einem Check-Constraint eine explizite Fehlermeldung an die Anwendung zurück geben?
Erstmal ein Beispielszenario:
Tabelle T hat eine Spalte für eine E-Mail Adresse, eine für die Domain und eine für die TLD. Wird nun eine E-Mail Adresse eingetragen wurden bisher im Nachgang zwei Trigger abgefeuert. Trigger A hat geprüft, ob das Format der E-Mail Adresse gültig ist. War z.B. kein @ enthalten wurde die Operation mit ROLLBACK anuliert und mit RAISERROR eine Entsprechende Meldung ausgeben. Trigger B hat aus der E-Mail Adresse nachträglich die Domain und die TLD ermittelt, sofern diese nicht bereits vorhanden waren, und in die vorgesehenen Spalten geschrieben.
Das Szenario ist natürlich stark vereinfacht, kommt aber so in unterschiedlichsten Ausprägungen in vielen meiner Tabellen vor. Wenn ich diese beiden Prozesse jetzt per Instead-of und / Check-Constraint lösen will ergeben sich folgende Fragen:
1) Kann ich z.B. zwei verschiedene Instead-of-Insert Trigger anwenden? Wenn ja, in welcher Reihenfolge werden sie ausgeführt?
2) Wer MSSQL kennt weiß, das Trigger immer nur einmal pro Update-Statement feuern. Ist das bei Instead-of-Triggern genauso?
3) Ich könnte mir überlegen, jede einzelne Prüfroutine und jeden automatisch ermittelten Wert per Funktion an Default- und Check-Constraints zu hängen. Kann ich bei einem Check-Constraint eine explizite Fehlermeldung an die Anwendung zurück geben?