對表的操作 | Inserted邏輯表 | Deleted邏輯表 |
---|---|---|
增加記錄(insert) | 存放增加的記錄 | 無 |
刪除記錄(delete) | 無 | 存放被刪除的記錄 |
修改記錄(update) | 存放更新后的記錄 | 存放更新前的記錄 |
4. 觸發(fā)器的執(zhí)行過程
5. 創(chuàng)建觸發(fā)器
create trigger trigger_name on {table_name|view_name} {After|Instead of} {insert|update|delete} as 相應(yīng)T-SQL語句
6. 修改觸發(fā)器:
alter trigger trigger_name on {table_name|view_name} {After|Instead of} {insert|update|delete} as 相應(yīng)T-SQL語句
7. 刪除觸發(fā)器:
drop trigger trigger_name
8. 查看數(shù)據(jù)庫中已有觸發(fā)器:
8.1 查看數(shù)據(jù)庫中所有觸發(fā)器
select * from sysobjects where xtype='TR'
8.2 查看單個觸發(fā)器
exec sp_helptext '觸發(fā)器名'
9. “Instead of”相關(guān)示例:
兩張表:學生(學號 int, 姓名 varchar)、借書記錄(學號 int, 圖書編號 int)
實現(xiàn)功能:在刪除學生表時,如果該學生仍有借書記錄(未還)則不能刪除
alter trigger trigger_學生_Delete on 學生 instead of Delete as begin if not exists(select * from 借書記錄, deleted where 借書記錄.學號 = deleted.學號) delete from 學生 where 學生.學號 in (select 學號 from deleted) end
10. “After”觸發(fā)器
10.1 在“訂單”表中建立觸發(fā)器,當向“訂單”表中插入一條訂單記錄時,檢查“商品”表的貨品狀態(tài)“狀態(tài)”是否為1(正在整理),則不能往“訂單”表加入該訂單。
create trigger trigger_訂單_insert on 訂單 after insert as if (select 狀態(tài) from 商品, inserted where 商品.pid = inserted.pid)=1 begin print 'the goods is being processed' print 'the order cannot be committed' rollback transaction --回滾,避免加入 end
10.2 在“訂單”表建立一個插入觸發(fā)器,在添加一條訂單時,減少“商品”表相應(yīng)的貨品記錄中的庫存。
create trigger trigger_訂單_insert2 on 訂單 after insert as update 商品 set 數(shù)量 = 數(shù)量 - inserted.數(shù)量 from 商品, inserted where 商品.pid = inserted.pid
10.3 在“商品”表建立刪除觸發(fā)器,實現(xiàn)“商品”表和“訂單”表的級聯(lián)刪除。
create trigger goodsdelete trigger_商品_delete on 商品 after delete as delete from 訂單 where 訂單.pid in (select pid from deleted)
10.4 在“訂單”表建立一個更新觸發(fā)器,監(jiān)視“訂單”表的“訂單日期”列,使其不能被“update”.
create trigger trigger_訂單_update on 訂單 after update as if update(訂單日期) begin raiserror('訂單日期不能手動修改',10,1) rollback transaction end
10.5 在“訂單”表建立一個插入觸發(fā)器,保證向“訂單”表插入的貨品必須要在“商品”表中一定存在。
create trigger trigger_訂單_insert3 on 訂單 after insert as if (select count(*) from 商品, inserted where 商品.pid = inserted.pid)=0 begin print '商品不存在' rollback transaction end
10.6 “訂單”表建立一個插入觸發(fā)器,保證向“訂單”表插入的貨品信息要在“訂單日志”表中添加
alter trigger trigger_訂單_insert on 訂單 for insert as insert into 訂單日志 select inserted.Id, inserted.pid,inserted.數(shù)量 from inserted
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
標簽:池州 大同 黃山 濱州 文山 新鄉(xiāng) 東營 來賓
巨人網(wǎng)絡(luò)通訊聲明:本文標題《SQL Server:觸發(fā)器實例詳解》,本文關(guān)鍵詞 SQL,Server,觸發(fā)器,實例,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。