特殊存儲過程——觸發器Trigger

觸發器類型

insert 觸發器
delete 觸發器
update 觸發器

Inserted和Deleted兩個臨時表的作用

Inserted:對于插入記錄操作來說,插入表里存放的是要插入的數據;對于更新記錄操作來說,插入表里存放的是要更新的記錄。
Deleted:對于更新記錄操作來說,刪除表里存放的是被更新記錄;對于刪除記錄操作來說,刪除表里存入的是被刪除的舊記錄。

1

參考:http://www.cnblogs.com/liushuijinger/archive/2012/06/10/2543941.html

觸發器寫法

CREATE TRIGGER  Trigger_Name --觸發器名,在一個數據庫中觸發器名是唯一的。
   ON  Table_Name | View_Name --觸發器所在的表或者視圖。
   AFTER(FOR)|Instead Of  INSERT,DELETE,UPDATE --定義成AFTER或Instead Of類型的觸發器。
   --AFTER跟FOR相同,不可在視圖上定義AFTER觸發器
   -- 后面是觸發器被觸發的條件,最少有一個,可以郵多個。如果有多個用逗號分開,順序無要求。
AS --觸發器要執行的操作
BEGIN
   --BEGIN跟END組成一個代碼塊,可以寫也可以不寫,如果觸發器中執行的SQL語句比較復雜,用BEGIN和END會讓代碼更加整齊,更容易理解。
END
GO --GO就代表結操作完畢

例子

create trigger trig_insert_student
on student for insert
as
    declare @number int
    -- 從inserted臨時表中獲取記錄值
    select @number=StudentNumber
           from inserted    --臨時表inserted    
    update student set Name='觸發器修改'
    where StudentNumber=@number
go
create trigger trig_insert_transInfo
on transInfo for insert
as
    declare @_transType   char(4),  --定義變量
            @_transMoney  money,
            @_cardID      char(10),
            @balance      money     --所剩余額

    -- 從inserted臨時表中獲取記錄值
    select @_transType = transType,
           @_transMoney = transMoney,
           @_cardID = cardID  
           from inserted    --臨時表inserted    

    if(@_transType = '支取')
       update bank set currentMoney=currentMoney-@_transMoney
              where cardID = @_cardID;
    else 
       update bank set currentMoney=currentMoney+@_transMoney
              where cardID = @_cardID;

    --顯示交易金額
    print '交易成功! 交易金額:'
          + convert(varchar(20),@_transMoney)

    --顯示所剩余額
    select @balance = currentMoney from bank 
           where cardId = @_cardID

    print '卡號:'+@_cardID 
          + ' 余額:'+convert(varchar(20),@balance);
go

參考:http://www.cnblogs.com/xugang/archive/2010/02/20/1669619.html

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容