實驗9 SQL Server 的觸發器
一、實驗目的
1.了解觸發器的觸發過程和類型
2.通過執行SQL腳本,掌握創建觸發器并測試觸發器
3.掌握通過使用觸發器維護數據完整性的方法。
二、實驗要求
1.按指定要求創建觸發器。
三、實驗步驟
1.創建一個名為tr_age的觸發器,要求在插入和更新時檢查AGE是否在15到60之間,如不在15到60,則彈出“年齡不合法”提示信息,SQL代碼如下所示:
CREATE TRIGGER tr_age
ON members
FOR INSERT,UPDATE
ASDECLARE @age INTSELECT @age = YEAR(GETDATE())-YEAR(m_birth)FROM insertedIF @age NOT BETWEEN 15 AND 60BEGINROLLBACK TRANSACTIONRAISERROR('年齡不合法',16,10)END
創建完觸發器tr_age后,再按F5執行以下更新數據表memebers的SQL代碼:
UPDATE members
SET m_birth='2000-6-4'
WHERE m_account='zhao888'
執行此段SQL更新記錄代碼后,將在結果框中顯示以下消息,表示觸發了數據表memebers中的觸發器tr_age:
服務器: 消息 50000,級別 16,狀態 10,過程 tr_age,行 15 年齡不合法
同樣,執行以下插入數據表members的SQL代碼,也一樣會觸發器在數據表members中定義的觸發器tr_age:
INSERT INTO members VALUES('dy','dy','女','1900-5-4','北京市',1000,'12345')
2.基于“商品表”創建AFTER INSERT觸發器tr_insert_price,實現新添記錄數據時商品的價格限制在10000以內,SQL代碼如下所示:
CREATE TRIGGER tr_insert_price
ON products
AFTER INSERT
ASDECLARE @price moneySELECT @price = p_priceFROM insertedIF @price > 10000BEGINROLLBACK TRANSACTIONRAISERROR('商品價格超出范圍',16,10)END
3.查看所創建觸發器詳細信息,SQL代碼如下所示:
USE eshop
EXEC sp_helptrigger members
EXEC sp_helptext tr_age
EXEC sp_helptrigger products
EXEC sp_helptext tr_insert_price
4.添加如下記錄,測試tr_insert_price觸發器的功能。
‘0240810331’,‘奇瑞小轎車’,‘2005-06-13’,8,‘25860.0’,‘大折扣’
INSERT INTO products VALUES('','奇瑞小轎車','2005-06-13',8,25860.0,'大折扣')
再按F5或點擊工具欄上的運行按鈕“”,運行插入記錄到數據表的SQL代碼,將觸發在數據表中定義的觸發器,在結果框中顯示以下消息:
服務器: 消息 50000,級別 16,狀態 10,過程 tr_insert_price,行 14 商品價格超出范圍
5.基于“商品表”創建AFTER UPDATE觸發器tr_update_price,實現修改記錄數據時商品的價格限制在10000以內,SQL代碼如下所示:
CREATE TRIGGER tr_update_price
ON products
AFTER UPDATE
ASDECLARE @price MONEYSELECT @price = p_priceFROM insertedIF @price > 10000BEGINROLLBACK TRANSACTIONRAISERROR('商品價格超出范圍',16,10)END
6.將商品號為“0130810324”的價格修改為12800,測試tr_update_price觸發器的功能。(T-SQL)在查詢分析器輸入如下更新數據表products中記錄的SQL代碼:
USE eshop
UPDATE products
SET p_price = 12800
WHERE p_no = ''
再按F5或點擊工具欄上的運行按鈕“”,運行插入記錄到數據表的SQL代碼,將觸發在數據表中定義的觸發器,在結果框中顯示以下消息:
服務器: 消息 50000,級別 16,狀態 10,過程 tr_update_price,行 14 商品價格超出范圍
四、注意事項
1.觸發器的類型
2.觸發器和約束的區別