SQL觸發器例項講解

2021-09-06 09:03:01 字數 3171 閱讀 3090

sql觸發器例項1

定義: 何為觸發器?在sql server裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。

常見的觸發器有三種:分別應用於insert , update , delete 事件。

我為什麼要使用觸發器?比如,這麼兩個表:

create table student(              --學生表

studentid int primary key,       --學號

....

)create table borrowrecord(               --學生借書記錄表

borrowrecord   int identity(1,1),       --流水號  

studentid      int ,                    --學號

borrowdate     datetime,                --借出時間

returndate     datetime,                --歸還時間

...)

用到的功能有:

1.如果我更改了學生的學號,我希望他的借書記錄仍然與這個學生相關(也就是同時更改借書記錄表的學號);

2.如果該學生已經畢業,我希望刪除他的學號的同時,也刪除它的借書記錄。

等等。這時候可以用到觸發器。對於1,建立乙個update觸發器:

create trigger trustudent

on student                         --在student表中建立觸發器

for update                          --為什麼事件觸發

as                                        --事件觸發後所要做的事情

if update(studentid)           

begin

update borrowrecord

set studentid=i.studentid

from borrowrecord br , deleted   d ,inserted i      --deleted和inserted臨時表

where br.studentid=d.studentid

end       

理解觸發器裡面的兩個臨時的表:deleted , inserted 。注意deleted 與inserted分別表示觸發事件的表「舊的一條記錄」和「新的一條記錄」。

乙個資料庫系統中有兩個虛擬表用於儲存在表中記錄改動的資訊,分別是:

虛擬表inserted                     虛擬表deleted

在表記錄新增時     存放新增的記錄                         不儲存記錄

修改時           存放用來更新的新記錄                   存放更新前的記錄

刪除時           不儲存記錄                             存放被刪除的記錄

乙個update 的過程可以看作為:生成新的記錄到inserted表,複製舊的記錄到deleted表,然後刪除student記錄並寫入新紀錄。

對於2,建立乙個delete觸發器

create trigger trdstudent

on student

for delete

asdelete borrowrecord

from borrowrecord br , delted d

where br.studentid=d.studentid

從這兩個例子我們可以看到了觸發器的關鍵:a.2個臨時的表;b.觸發機制。

sql觸發器例項2

/trigger語法

的資料在存到觸發器作用的表的同時,也同時生成一條拷貝到insered表中

/wtbh=@wtbh

endif (select data_sfjl from t_logsetup)='是'

begin

declare @oldcjmc char (100)          declare @oldlyrq datetime

declare @oldbzbh char (60)             declare @oldzl char (20)

declare @olddj char (10)

declare @newcjmc char (100)          declare @newlyrq datetime

declare @newbzbh char (60)             declare @newzl char (20)

declare @newdj char (10)

declare @xgr char (20)

if @oldcjmc<>@newcjmc

begin

insert into t_modifylog (wtbh, mod_time, mod_table, mod_field, ori_value, now_value, mod_people) values

(@wtbh,getdate(), 'chl_lydj','cjmc', @oldcjmc, @newcjmc, @xgr)

endend

//修改時,直接把『create』改為『alter』即可

/clmc=@clmc

select @feiyong_z=feiyong_z, @feiyong_xf=feiyong_xf, @feiyong_sy=feiyong_sy from gongchengxinxi wheredwgcbh=@dwbh

syf=@dj

wtbh=@wtbh

feiyong_sy=@feiyong_sy

dwgcbh=@dwbh

wtbh=@wtbh

end//clmc=@clmc

select @feiyong_z=feiyong_z, @feiyong_xf=feiyong_xf, @feiyong_sy=feiyong_sy from gongchengxinxi wheredwgcbh=@dwbh

feiyong_sy=@feiyong_sy

dwgcbh=@dwbh

endend

//from:

SQL觸發器例項講解學習(2)

next 觸發器示例 2 建立觸發器 t insert 捲菸銷售表 該觸發器較複雜。說明 每當 捲菸庫存表 發生insert 動作,則引發該觸發器。觸發器功能 實現業務規則。業務規則 如果銷售的捲菸品牌不存在庫存或者庫存為零,則返回錯誤。否則則自動減少 捲菸庫存表 中對應品牌捲菸的庫存數量和庫存金額...

SQL 觸發器例項

sql觸發器例項1 定義 何為觸發器?在sql server裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。常見的觸發器有三種 分別應用於insert update delete 事件。我為什麼要使用觸發器?比如,這麼兩個表 create table ...

SQL觸發器例項

2 建立觸發器 根據需求分析,為bbs type表 bbs lanmu表 bbs topic表分別建立after觸發器,該觸發器由delete事件觸發。建立在這3個表之上的觸發器之間是巢狀觸發的關係,即bbs type表上的觸發器觸發bbs lanmu表上的觸發器,bbs lanmu表上的觸發器再觸...