「削除後」とは、削除が行われるまでトリガーが起動されないことを意味すると思いましたが、これが私の状況です...
C# でトリガーを削除した後、3 つのほぼ同一の SQL CLR を作成しました。これは約 1 か月間、美しく機能しました。自動削除ツールの実行中に、3 つのうちの 1 つが突然動作を停止しました。
動作を停止したということは、クライアント ソフトウェアを介してテーブルからレコードを削除できなかったことを意味します。トリガーを無効にすると削除が許可されましたが、再度有効にすると削除できなくなりました。
だから私の質問は、「これはどうしてですか?」ということです。それに使用されたツールがメモリを混乱させた可能性はありますか?トリガーが例外をスローしたとしても、それが AFTER delete の場合、レコードは削除されるべきではありませんか?
すべてのトリガーは次のようになります。
ALTER TRIGGER [sysdba].[AccountTrigger] ON [sysdba].[ACCOUNT] AFTER DELETE AS
EXTERNAL NAME [SQL_IO].[SQL_IO.WriteFunctions].[AccountTrigger]
GO
CLR トリガーは、別のデータベースに対して 1 つの選択と 1 つの挿入を行います。SQL Server Mgmt Studio からのエラーがあるかどうかはまだわかりませんが、見つけ次第質問を更新します。
アップデート:
上記の同じトリガー コードを再実行すると、すべてが再び機能するようになるため、SSMS でエラーが発生した場合はどうなるかわかりません。
また、トリガーのコードのどこにもロールバックの呼び出しはありません。