亚洲福利网站,国产精品久久国产三级国电话系列 ,欧美久久久久久,蜜桃av在线

IT培訓-高端面授IT培訓機構
云和教育:云和數據集團高端IT職業教育品牌
  • 國家級
    全民數字素養與技能培訓基地
  • 河南省
    第一批產教融合型企業建設培育單位
  • 鄭州市
    數字技能人才(碼農)培養評價聯盟

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

  • 發布時間:
    2016-10-12
  • 版權所有:
    云和教育
  • 分享:

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.觸發機制。

這里我們只講解最簡單的觸發器。復雜的容后說明。

主站蜘蛛池模板: 阳泉市| 时尚| 大埔区| 永仁县| 呼图壁县| 上犹县| 牟定县| 郎溪县| 英吉沙县| 鄂托克前旗| 庄河市| 茂名市| 鄄城县| 龙海市| 临沧市| 温泉县| 秀山| 兰坪| 呼和浩特市| 教育| 太原市| 大余县| 沂南县| 惠东县| 邵武市| 霍林郭勒市| 茌平县| 顺义区| 万荣县| 巴楚县| 长乐市| 许昌县| 双辽市| 东兰县| 武威市| 阳信县| 古田县| 盐边县| 高清| 灵石县| 神木县|