sql server----触发器

                      触发器

一、定义:

 触发器是一种特殊的存储过程,一般的存储过程只要被主动调用时才会实现,而触发器则是用户对表的修改时就会自自动触发。 触发器直接定义在表上,当没有实现相应的功能时会自动回滚到以前的状态。触发器经常用于对于表的删除与更新,例如对于一个表的删除某一个数据,但这个数据会在其他的表格做为外码,如果不创建触发器进行连级删除,那么就会产生约束的冲突。

二、语法

        触发器分为两种类型,一种是after,另一种是Instead of .

           after作为动作实现之后,进行的操作。

           Instead of 为在删除或者更新等操作之前,先进行的操作(一般所要删除的数据作为外键是,使用instead of)

        创建触发器:

               create trigger tgr_name
               on table_name
               with encrypion –加密触发器
                for update...
                as
                Transact-SQL

         修改触发器:

                     

                        create trigger tgr_name

                        on table_name

                         {after|instead of} {insert|delete|update}

                         as 

                          SQL语句

                  删除触发器:                

 
          drop trigger +触发器名

 在使用触发器时,会使用两个特殊的虚拟表-----deleted 和inserted 。这两个有以下的特性:

             ① 表的结构与所绑定的表结构一样,存储的所要处理的数据。

             ②  在事务处理完成是,deleted和inserted这两个表也将会被删除。

              ③ deleted存储的是将要delete或者update 的数据。

             ④inserted存储的是将要insert或者update 的数据

三、用法

 一、表的关联删除

create trigger Employee_trigger1
on Employees
instead of  delete 
  as
  begin 
  delete from EmployeeTerritories where EmployeeID=(select EmployeeID  from deleted )
    print '删除成功'
  end 
  

   调用:   

    delete   from  Employees    where EmployeeID=2

    修改触发器:

        alter trigger Employee_trigger1
        on Employees
        for update 
          as 
          begin 
          print '更新完成'
          end

         删除触发器:

     drop trigger  Employee_trigger1

   二、表的插入之前的主键判断

  create trigger   Employees_tigger
  on Employees
   instead of  insert
    as  
    begin
     if exists (select * from inserted where EmployeeID  in(select EmployeeID  from Employees ))
        begin
        print  '存在ID,请重新输入'
        rollback
        end
        else 
        print '插入成功'
    end 
    

      删除触发器:

    drop trigger Employees_tigger
  

        

        






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值