标签归档:触发器

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修改触发器后,触发器

mssql sqlserver 触发器中update()关键字说明简介


摘要:
下文讲述触发器中update()关键字的用法,如下所示:
实验环境:sqlserver 2008 R2


update()功能说明

update()函数的功能是检测列值是否被修改

update()举例说明

 create table A(keyId int, info varchar(30))   
 go
 create table ALog(keyId int, info varchar(30),
                           sort nvarchar(30),
    updatetime datetime default getdate())
  go
---生成基础数据
 insert into A(keyId,info)values(1,N'sql博客'),(2,N'sql教程')
go

---创建update触发器和update函数应用
create trigger tr_A 
   on A
 after update 
 as 
   if (update(keyId) or update(info))  ---检测列是否改动
   begin
    insert into ALog(keyId,info,sort)
     select keyId,info,N'修改前' from deleted 
    insert into ALog(keyId,info,sort)
     select keyId,info,N'修改后' from inserted 
   end
go

update A set keyId=100,info='aa' 
  where keyId =1 
   go
select * from ALog
  go

update A set keyId=98,info='testInformation' 
  where keyId =100 
   go
select * from ALog
  go


   truncate table A
   drop       table A 
    go
   truncate table ALog
   drop       table ALog 
    go