次のトリガーを検討してください。
ALTER TRIGGER myTrigger
ON someTable
AFTER INSERT
AS BEGIN
DELETE FROM someTable
WHERE ISNUMERIC(someField) = 1
END
テーブル someTable があり、人々が不正なレコードを挿入するのを防ごうとしています。この質問の目的のために、不良レコードにはすべて数値のフィールド「someField」があります。
もちろん、これを行う正しい方法はトリガーを使用することではありませんが、私はソース コードを制御していません... SQL データベースだけです。そのため、不良行の挿入を実際に防ぐことはできませんが、すぐに削除することはできます。これは、私のニーズには十分です。
トリガーは機能しますが、問題が 1 つあります...トリガーが起動すると、挿入されたばかりの不良レコードが削除されないようです...古い不良レコードは削除されますが、挿入されたばかりの不良レコードは削除されません。そのため、他の誰かが来て別の INSERT を実行するまで削除されない不良レコードが 1 つ浮かんでいることがよくあります。
これはトリガーの理解に問題がありますか? トリガーの実行中に、新しく挿入された行はまだコミットされていませんか?