首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2012 - Adventure触发器而不是

2012 - Adventure触发器而不是
EN

Stack Overflow用户
提问于 2015-09-29 12:13:53
回答 1查看 253关注 0票数 0

我的目标是在表上创建一个INSTEAD OF trigger,如果满足布尔谓词,该表只会激发。MSDN SQL触发器网页没有提供示例,因此我认为这是不可能的。

另一种选择:

  1. 使用AFTER trigger
  2. SELECT用于某些值。
  3. IF x ROLLBACK

这似乎是浪费。这是否减少了所需的UPDATE LOCK时间?

编辑:针对Dan的评论:的问题扩展

代码语言:javascript
复制
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中的建议对代码进行的修改

代码语言:javascript
复制
--!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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-29 12:49:49

首先,要加强安全性,请使用安全选项。只允许授权员工在桌子上进行更新。

其次,要强制执行非安全业务规则,如果违反业务规则,只需使用AFTER触发器和raiserror。查看IF .... BEGIN ... END控制流结构。

虽然您可以使用一个替代触发器,但这并不是真正的目的。相反,触发器用于使视图可更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32843772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档