1. 程式人生 > >sql server----觸發器

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