我的目标是在表上创建一个INSTEAD OF trigger,如果满足布尔谓词,该表只会激发。MSDN SQL触发器网页没有提供示例,因此我认为这是不可能的。
另一种选择:
AFTER trigger。SELECT用于某些值。IF x ROLLBACK这似乎是浪费。这是否减少了所需的UPDATE LOCK时间?
编辑:针对Dan的评论:的问题扩展
CREATE TRIGGER HumanResources.trg_deptUpdate
ON HumanResources.Department
INSTEAD OF UPDATE
AS
PRINT N'Department details are to be amended only be authorized staff.';
GO
--2 Test trigger.
UPDATE HumanResources.Department
SET Name = 'Funny Team'
WHERE Name = 'Sales';ANSWER1 EDIT2:根据Ben在EDIT2中的建议对代码进行的修改
--!1 Simple TRIGGER that prevents UPDATES of the form X the the Department table.
--!X=[name]='Funny Team'
CREATE TRIGGER HumanResources.trg_deptUpdate
ON HumanResources.Department
WITH ENCRYPTION
AFTER UPDATE
AS
IF (SELECT COUNT(Name)
FROM HumanResources.Department
WHERE Name = 'Funny Team') > 0
ROLLBACK;
RAISERROR('This is message HRu1: You cannot insert silly values'
,6 -- Severity 6; business rule level message.
,1); -- State 1; not sure of the implication (State !=0) = operation failure?
GO发布于 2015-09-29 12:49:49
首先,要加强安全性,请使用安全选项。只允许授权员工在桌子上进行更新。
其次,要强制执行非安全业务规则,如果违反业务规则,只需使用AFTER触发器和raiserror。查看IF .... BEGIN ... END控制流结构。
虽然您可以使用一个替代触发器,但这并不是真正的目的。相反,触发器用于使视图可更新。
https://stackoverflow.com/questions/32843772
复制相似问题