Sql Server 觸發器實現多表之間同步增加、刪除與更新

來源:互聯網
上載者:User

Sql Server 觸發器實現多表之間同步增加、刪除與更新

定義: 何為觸發器?在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,               --歸還時間
       ...
     )

 

分別建立增加、刪除、更新的觸發器(Trigger)來達到兩張表之間資料同步的目的。

1:資料同步增加:

如有兩張表——A表和B表,建立觸發器使當A表插入資料後B表也同步插入資料。其中B表插入資料的欄位需要同A表中的欄位相對應。

CREATE TRIGGER 觸發器名稱
ON A表
AFTER INSERT
AS BEGIN INSERT INTO
B表(B表欄位1,B表欄位2,B表欄位3)
SELECT A表欄位1,A表欄位2,A表欄位3
FROM INSERTED
END
 

2.資料同步刪除:

如有兩張表——A表和B表,建立觸發器使當A表刪除資料後B表也同步刪除資料。其中B表與A表應有相應主鍵關聯。

CREATE TRIGGER 觸發器名稱
ON A表
AFTER DELETE
AS BEGIN DELETE B表
WHERE
B表主鍵 IN(
SELECT A表主鍵
FROM DELETED)
END
 

3.資料同步更新:

如有兩張表——A表和B表,建立觸發器使當A表資料更新後B表也同步更新資料。

CREATE TRIGGER 觸發器名稱
ON A表
AFTER UPDATE
AS
update B表
SET
B.B表欄位1=A.A表欄位1 
FROM
B表 AS B,INSERTED AS A  
WHERE B.B表主鍵=A.A表主鍵


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

     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
    As
      Delete BorrowRecord
        From BorrowRecord br , Delted d
        Where br.StudentID=d.StudentID

    從這兩個例子我們可以看到了觸發器的關鍵:A.2個臨時的表;B.觸發機制。
    這裡我們只講解最簡單的觸發器。複雜的容後說明。


 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.