Sql Server觸發(fā)器的使用
對表的操作 |
Inserted邏輯表 |
Deleted邏輯表 |
增加記錄(insert) |
存放增加的記錄 |
無 |
刪除記錄(delete) |
無 |
存放被刪除的記錄 |
修改記錄(update) |
存放更新后的記錄 |
存放更新前的記錄 |
三、for、after、instead of觸發(fā)器
after:觸發(fā)器在觸發(fā)它們的語句完成后執(zhí)行。如果該語句因錯誤而失敗,觸發(fā)器將不會執(zhí)行。不能為視圖指定after觸發(fā)器,只能為表指定該觸發(fā)器??梢詾槊總€觸發(fā)操作(insert、update、delete)指定多個after觸發(fā)器。如果表有多個after觸發(fā)器,可使用sp_settriggerorder定義哪個after觸發(fā)器最先激發(fā),哪個最后激發(fā)。除第一個和最后一個觸發(fā)器外,所有其他的after觸發(fā)器的激發(fā)順序不確定,并且無法控制。
for:等同于after
instead of:該觸發(fā)器代替觸發(fā)操作執(zhí)行??稍诒砗鸵晥D上指定instead of觸發(fā)器。只能為每個觸發(fā)操作(insert、update、delete)定義一個instead of觸發(fā)器。instead of觸發(fā)器可用于對insert和update語句中提供的數據值執(zhí)行增強的完整性檢查。
四、 觸發(fā)器的使用
1、創(chuàng)建觸發(fā)器:
createtriggertrigger_name
on{table_name|view_name}
{for|After|Insteadof}
[insert,update,delete]
as
sql_statement
2、刪除觸發(fā)器:
droptriggertrigger_name
3、查看數據庫中已有的觸發(fā)器:
select*fromsysobjectswherextype='TR'
4、查看單個觸發(fā)器:
execsp_helptext'觸發(fā)器名'
5、修改觸發(fā)器:
altertriggertrigger_name
on{table_name|view_name}
{for|After|Insteadof}
[insert,update,delete]
as
sql_statement
五、觸發(fā)器的實例
1、在Orders表中建立觸發(fā)器,當向Orders表中插入一條記錄時,檢查goods表的貨品狀態(tài)status是否為1。是,則不能往Orders表加入該訂單。
if(object_id('tgr_orders_insert','tr')isnotnull)droptrigger[tgr_orders_insert];
go
createtrigger[tgr_orders_insert]
on[orders]
afterinsert
as
if(select[status]from[goods],[inserted]where[goods].name=[inserted].name)=1
begin
print'thegoodsisbeingprocessed'
print'theordercannotbecommitted'
rollbacktransaction--回滾﹐避免加入
end
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯(lián)網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。