标签归档:触发器

mssql sqlserver 获取数据库中所有触发器的方法分享


摘要:
下文讲述从数据库中获取所有触发器的方法分享,如下所示:
实验环境:sql server 2008 R2


实现思路:
通过查阅sys.objects对象中类型为tr的数据行,所列出的数据,每一行代表一个系统触发器,如下所示:

SELECT * FROM  sys.objects WHERE [type] = 'tr'

mssql sqlserver 禁止删除数据表的方法分享


摘要:
下文讲述数据库中禁止删除数据表的方法分享,如下所示:
实验环境:sql server 2008 R2


为了避免用户误输sql命令,导致相应的数据表被删除,导致数据库灾难的发生,下文将举例
采用ddl触发器避免用户误删数据表的方法分享。
例:

   create trigger  stopDeleteTable
   on database 
    for drop_table   
    as 
      print N'禁止删除相关数据表!'
      rollback;
     go
     ---以上sql脚本创建了一个数据库触发器器,并对drop表命令进行了监控,
     ---当我们执行删除表命令时,此时会提示相关的禁止删除的错误消息。

mssql sqlserver 触发器执行顺序


摘要:
由于一个表可以定义多个触发器,有时候由于需要定义触发器的执行顺序,我们需要为触发器
指定相应的顺序



sql server 触发器执行顺序分类

sqlserver 触发器执行顺序分类为:
first 、last、none 三种类型

sql server 触发器执行顺序设置方法

设置触发器的顺序需采用系统存储过程 sp_settriggerorder
例:

 ---将触发器tr_test设置为update语句对应的第一个触发器
sp_settriggerorder 
   @triggername ='tr_test',
   @order ='first',
   @stmttype ='update'
   go

 ---将触发器tr_test设置为delete语句对应的第一个触发器
sp_settriggerorder 
   @triggername ='tr_test',
   @order ='first',
   @stmttype ='delete'
   go


查询触发器的执行顺序

在sqlserver中查询触发器的执行顺序,我们可以采用objectproperty 函数获取触发器的属性
例:

  select objectproperty(object_id(N'tr_test'),'ExecIsFirstUpdateTrigger') 
    ---此函数返回1 则代表此触发器是第一个更新触发器
    /*
ExecIsFirstDeleteTrigger:第一个删除触发器
ExecIsFirstUpdateTrigger:第一个更新触发器
ExecIsFirstInsertTrigger:第一个插入触发器

ExecIsLastDeleteTrigger: 最后一个删除触发器
ExecIsLastUpdateTrigger:最后一个更新触发器
ExecIsLastInsertTrigger:最后一个插入触发器
   */


注意事项:
1. instead of 触发器不可以设置执行顺序
2. 如果对触发器重建或使用alter修改触发器后,触发器