sqlserver 中创建触发器execute master有什么作用

 我来答
最黑的是眼
2016-04-18 · TA获得超过9062个赞
知道大有可为答主
回答量:3537
采纳率:0%
帮助的人:991万
展开全部
after等价于for,是事后触发。instead of则会取代原来的操作,例如在你的例子里,将不再执行插入操作,而是执行触发器里的操作。

execute as是用来定义模块的执行上下文
EXECUTE AS { CALLER | SELF | OWNER | 'user_name' }
其中CALLER指模块调用方,SELF指创建或更改模块的用户,OWNER指模块的当前所有者, ‘user_name’ 则是指定的用户。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜独行孤单
2016-04-18 · TA获得超过3460个赞
知道大有可为答主
回答量:2803
采纳率:82%
帮助的人:643万
展开全部
触发器是一种特殊类型的存储过程,对特定事件作出相应。触发器有两种类型:数据定义语言(DDL)触发器和数据操纵语言(DML)触发器。
  DDL触发器在用户以某些方式(CREATE、ALTER、DROP或相似的语句)对数据库结构进行修改时激活作出响应。一般来说,只会在对数据库结构的改变或历史进行极为严格的审计时才会用到DDL触发器。
  DML触发器是一些附加在特定表或视图上的代码片段。与需要显式调用代码的存储过程不同,只要有附加触发器的时间在表中发生,触发器中的代码就会自动运行。实际上也不能显式地调用触发器-唯一的做法是在指定的表中执行所需的操作。
  除了不能够显式地调用触发器,还可在存储过程中发现另外两个触发器所没有的内容:参数和返回码。
  可将触发器附加到什么事件呢?因为在SQL中可以使用3类动作查询,所以就有3种类型的触发器,另外加上混合搭配这些时间并对时间定时激活的混合触发器类型。
INSERT触发器
DELETE触发器
UPDATE触发器
以后任意类型的混合
  注意:
  值得注意的是,有时即使执行的动作是前面这些类型中的一种,触发器也不会激活。问题在于进行的操作是否在记录的活动中。例如,DELETE语句是一个正常的记录活动,它会激活任何删除触发器,而TRUNCATE TABLE也有删除行的作用,但只是把表使用的空间释放而已-没有记录单个行删除操作,所以没有激活任何触发器。批量操作默认情况下不激活触发器,需要显式告知批量操作激活触发器。
  创建触发器的语法:
  CREATE TRIGGER <trigger name>
  ON [ <schema name>. ]<table or view name>
  [WITH ENCRYPTION | EXECUTE AS <CALLER | SELF | <user> > ]
  {{{ FOR | AFTER} < [DELETE][,][INSERT][,][UPDATE] > } | INSTEAD OF }[WITH APPEND][NOT FOR REPLICATION]
  AS
  < <sql statements> | EXTERNAL NAME <assembly method specifier> >

  ON子句用来之处触发器将要附加的表,以及在何时何种情况下激活这个触发器。
  1、ON子句
  这部分只是对创建触发器所针对的对象进行命名。记住,如果触发器的类型是AFTER触发器(使用FOR或AFTER来声明触发器),那么ON子句的目标就必须是一个表-AFTER触发器不支持视图。
  2、WITH ENCRYPTION选项
  加密触发器。如果添加了这个选项,则可以确保没有人能够查看你的代码(甚至是你自己)。和视图与存储过程一样,使用WITH ENCRYPTION选项需要记住的是,每次在触发器上使用ALTER语句时都必须重新应用该选项,如果使用ALTER STATEMENT语句但不包含WITH ENCRYPTION选项,那么触发器就不再被加密。
  3、FOR|AFTER子句与INSTEAD OF子句
  除了要确定激活触发器(INSERT、UPDATE、DELETE)的查询类型以外,还要对触发器的激活时间做出选择。虽然人们经常考虑使用FOR触发器,但是也可以使用INSTEAD OF触发器。对着两个触发器的选择将会影响到是在修改数据之前还是之后进入触发器。FOR和AFTER的意义是一样的。
  FOR|AFTER
  FOR(或者AFTER)子句表明了期望触发器在何种动作类型下激活。当有INSERT、UPDATE或DELETE或三者混合操作时,都可以激活触发器。
  FOR INSERT,DELETE
  --或者是:
  FOR UPDATE,INSERT
  --或者是:
  FOR DELETE

  1、INSERT触发器
  当有人向表中插入新的一行时,被标记为FOR INSERT的触发器的代码就会执行。对于插入的每一行来说,SQL Server会创建一个新行的副本并把该副本插入到一个特殊的表中,该表只在触发器的作用域内存在,该表被称为Inserted表。特别需要注意的是,Inserted表只在触发器激活时存在。在触发器开启之前或完成之后,都要认为该表示不存在的。
  2、DELETE触发器
  它和INSERT触发器的工作方式相同,只是Inserted表示空的(毕竟是进行删除而非插入,所以对于Inserted表示没有记录)。相反,每个被删除的记录的副本将会插入到另一个表中,该表称为Deleted表,和Inserted表类似,该表只存在于触发器激活的时间内。
  3、UPDATE触发器
  除了有一点改变以外,UPDATE触发器和前面的触发器是很类似的。对表中现有的记录进行修改时,都会激活被声明FOR UPDATE的触发器的代码。唯一的改变是没有UPDATE表。SQL Server认为每一行好像删除了现有记录,并插入了全新的记录。声明为FOR UPDATE的触发器并不是只包含一个表,而是两个特殊的表,称为Inserted表和Deleted表。当然,这两个表的行数是完全相同。
  4、WITH APPEND选项
  WITH APPEND选项并不常用,老实讲,用到它的可能性很小;WITH APPEND选项只能应用于6.5兼容模式中。
  如果已经声明了一个称为trgCheck的触发器在更新和插入时强制执行数据完整性,那么就不能创建另一个触发器来进行级联更新。一旦创建了更新(或插入、删除)触发器,那么就不能创建另一个同一动作类型的触发器。为解决这个问题,WITH APPEND子句显式地告诉SQL Server,即使在表上已经有了这种类型的触发器,还可以添加一个新的触发器。当有合适的触发动作(INSERT、UPDATE、DELETE)发生时,会同时激活两个触发器。
  5、NOT FOR REPLICATION选项
  如果添加了该选项,会稍微地改变关于何时激活触发器的规则。在适当的位置使用这个选项,无论与复制相关的任务何时修改表,都不会激活触发器。通常,当修改了原始表,并且不会再进行修改的时候会激活触发器(进行内务处理或级联等操作)。
  6、AS子句
  和在存储过程中的使用完全相同,这正是触发器的实质所在。AS关键字告诉SQL Server,代码将要启动。

附上出处链接:http://www.cnblogs.com/kissdodog/p/3173421.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式