第四講 編程細節(上部分)
1、觸發器
2、游標
3、函數
4、存儲過程
5、事務
---------------------
作者:懶蟲 # SapphireStudio .
歡迎訪問我們的站點:www.chair3.com
歡迎轉載。
--------------------
這裡只打算講解四部分了,也就最簡單、最常用的四部分。
1、觸發器。
定義: 何為觸發器?在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程序。觸發器是一個特殊的存儲過程。
常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。(SQL Server 2000定義了新的觸發器,這裡不提)
我為什麼要使用觸發器?比如,這麼兩個表:
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
for Update
-------------------------------------------------------
--Name:truStudent
--func:更新BorrowRecord 的StudentID,與Student同步。
--Use :None
--User:System
--Author: 懶蟲 # SapphireStudio (www.chair3.com)
--Date : 2003-4-16
--Memo : 臨時寫寫的,給大家作個Sample。沒有調試阿。
-------------------------------------------------------
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
理解觸發器裡面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發事件的表“舊的一條記錄”和“新的一條記錄”。
一個Update 的過程可以看作為:生成新的記錄到Inserted表,復制舊的記錄到Deleted表,然後刪除Student記錄並寫入新紀錄。
對於2,創建一個Delete觸發器
Create trigger trdStudent
On Student
for Delete
-------------------------------------------------------
--Name:trdStudent
--func:同時刪除 BorrowRecord 的數據
--Use :None
--User:System
--Author: 懶蟲 # SapphireStudio (www.chair3.com)
--Date : 2003-4-16
--Memo : 臨時寫寫的,給大家作個Sample。沒有調試阿。