1、觸發(fā)器。
定義: 何為觸發(fā)器?在SQL Server里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過程。
常見的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件。(SQL Server 2000定義了新的觸發(fā)器,這里不提)
我為什么要使用觸發(fā)器?
比如,這么兩個(gè)表:
Create Table Student( --創(chuàng)建學(xué)生表
StudentID int primary key, --學(xué)號(hào),定義主鍵約束
....
)
Create Table BorrowRecord( --創(chuàng)建借書記錄表
BorrowRecord int identity(1,1), --自動(dòng)增長流水號(hào)
StudentID int , --學(xué)號(hào)
BorrowDate datetime, --借出時(shí)間
ReturnDAte Datetime, --歸還時(shí)間
...
)
用到的功能有:
1.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書記錄表的學(xué)號(hào));
2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書記錄。
等等。
這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)Update觸發(fā)器:
Create Trigger truStudent
On Student
for Update --觸發(fā)器類型--Update
-------------------------------------------------------
--Name:truStudent
--func:更新BorrowRecord 的StudentID,與Student同步。
--Use :None
--User:System
--Author: wp_love
--Date : 2003-4-16
--Memo : 臨時(shí)寫寫的,給大家作個(gè)Sample。沒有調(diào)試阿。
-------------------------------------------------------
As
if Update(StudentID)
begin
Update BorrowRecord
Set br.StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i
Where br.StudentID=d.StudentID
end
理解觸發(fā)器里面的兩個(gè)臨時(shí)的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。
一個(gè)Update 的過程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫入新紀(jì)錄。
對(duì)于2,創(chuàng)建一個(gè)Delete觸發(fā)器
Create trigger trdStudent
On Student
for Delete
-------------------------------------------------------
--Name:trdStudent
--func:同時(shí)刪除 BorrowRecord 的數(shù)據(jù)
--Use :None
--User:System
--Author:
--Date : 2003-4-16
--Memo : 臨時(shí)寫寫的,給大家作個(gè)Sample。沒有調(diào)試阿。
-------------------------------------------------------
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
從這兩個(gè)例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表;B.觸發(fā)機(jī)制。
這里我們只講解最簡單的觸發(fā)器。復(fù)雜的容后說明。