1
Ich lese Code für Trigger.SQL Server-Trigger, der das Löschen von Zeilen nicht zulässt
CREATE TRIGGER No_DeleteCustomers
ON Customers
INSTEAD OF DELETE
AS
IF @@ROWCOUNT = 0
RETURN
RAISERROR('No deleting allowed', 11, 1)
Aber ich bin verwirrt ... @@ROWCOUNT
wird nicht verwendet, um die Anzahl der betroffenen Zeilen in der letzten Anweisung zeigen ... Wie verhindern, dass dies mich Zeilen aus der Tabelle zu löschen?
Sie haben Recht, @@ ROWCOUNT wird verwendet, um die Anzahl der zurückgegebenen Zeilen zu überprüfen. Die IF-Anweisung im Trigger prüft, ob das Ergebnis null Datensätze hat, und führt dann die RAISERROR-Anweisung aus. Die RAISERROR-Anweisung beendet die Transaktion und gibt die Nachricht "Kein Löschen zulässig" zurück. Dies verhindert, dass Sie Zeilen löschen können. – MayowaO
Ich bin neugierig, warum dieser Auslöser überhaupt existiert. Scheint, als wäre es vielleicht eine bessere Idee, Löschprivilegien auf dem Tisch zu verweigern. – Xedni
@Xedni Obwohl Sie für die meisten Benutzer korrekt sind, können einigen Benutzern (wie sa) keine Privilegien verweigert werden. Ein solcher Trigger kann hilfreich sein, um das versehentliche Löschen von Zeilen durch Systemadministratoren zu verhindern der Trigger und dann löschen, aber das ist nicht wahrscheinlich, dass versehentlich geschehen würde ...) –