データベーステーブルに行が挿入されるときに実行する必要のあるSQLコードを記述しているので、AFTERINSERTトリガーを使用しています。コードは非常に複雑であるため、まだいくつかのバグが存在する可能性があります。
トリガーの実行中にエラーが発生した場合、SQLServerはバッチまたはトランザクション全体(あるいはその両方)を中止することを発見しました。これは、データベースを使用するメインアプリケーションに問題を引き起こすため、私には受け入れられません。また、そのアプリケーションのソースコードがないため、適切なデバッグを実行できません。トリガーが失敗した場合でも、成功するにはすべてのデータベースアクションが絶対に必要です。
エラーが発生した場合にSQLServerがINSERTアクションを中止しないように、トリガーをコーディングするにはどうすればよいですか?
さらに、トリガーが失敗したことを実際に知ることができるように、適切なエラー処理を実行するにはどうすればよいですか?エラーデータを含む電子メールを送信することは私にとっては問題ありませんが(トリガーの主な目的は実際に電子メールを送信することです)、トリガーのエラー状態を検出してそれに対応するにはどうすればよいですか?
編集:
トリガー以外のものを使用してパフォーマンスを最適化するためのヒントをありがとうございますが、このコードは、実行時間が長く、パフォーマンスが集中するという意味で「複雑」ではありません。メールメッセージを作成して送信するだけですが、そのためには、さまざまなリンクテーブルからデータを取得する必要があります。このアプリケーションをリバースエンジニアリングしているため、データベーススキーマが利用できず、検索を試みています。それを回避する方法。これが、変換エラーまたは予期しない/ null値がまだ忍び寄り、トリガーの実行をクラッシュさせる可能性がある理由です。
また、前述のように、アプリケーション自体でデバッグを実行したり、アプリケーション層で必要なことを実行するように変更したりすることは絶対にできません。アプリケーションイベントに対応する唯一の方法は、アプリケーションがDBに書き込みを行ったときに、データベーストリガーを起動して、何かが発生したことを通知することです。