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语句将终止事务并返回消息'不允许删除'。这是阻止你删除行的原因。 – MayowaO
我很好奇为什么这个触发器甚至存在。似乎可能拒绝删除桌面上的特权将是一个更好的主意。 – Xedni
@Xedni当你对于大多数用户来说是正确的,一些用户(如SA)不能否认的任何特权,这样的触发可以帮助防止系统管理员错误地删除行(当然,没有什么能阻止他们从禁用触发,然后删除,但这不太可能会被错误发生...) –