1
トリガー用のコードを読んでいます。行の削除を許可しないSQL Serverトリガー
CREATE TRIGGER No_DeleteCustomers
ON Customers
INSTEAD OF DELETE
AS
IF @@ROWCOUNT = 0
RETURN
RAISERROR('No deleting allowed', 11, 1)
しかし、私は混乱しています...最後の文で変更された行数を表示するために使用されていない@@ROWCOUNT
されています...これはどのようにテーブルから行を削除するから私を防ぐのですか?
正しいですが、@@ ROWCOUNTは返される行数の確認に使用されます。トリガー内のIFステートメントは、結果にゼロレコードがあるかどうかをチェックしてから、RAISERRORステートメントを実行します。 RAISERRORステートメントはトランザクションを終了し、 'No deletedting allowed'というメッセージを返します。これは、行を削除できないようにします。 – MayowaO
なぜこのトリガーが存在するのか不思議です。テーブルの削除権限を拒否した方が良い考えです。 – Xedni
@Xedniほとんどのユーザーには間違いありませんが、saなどのユーザーは権限を拒否できません。そのようなトリガーは、システム管理者が間違って行を削除するのを防ぐのに役立ちます(もちろん、引き金を引いて削除しますが、これは間違いで起こる可能性は低いです...) –