程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 《高性能的數據庫》 第四講 編程細節(1)

《高性能的數據庫》 第四講 編程細節(1)

編輯:關於SqlServer
 第四講 編程細節(上部分)

 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。沒有調試阿。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved