SQL 触发器的使用
生活随笔
收集整理的這篇文章主要介紹了
SQL 触发器的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
基本的語法我都不寫了,需要的各位可以去查下SQL聯(lián)機叢書
我只寫簡單的應用及經(jīng)驗
1、代碼:寫觸發(fā)器之前一般要判斷該觸發(fā)器是否存在,如果存在則要刪除該觸發(fā)器,這樣可以保證腳本多次運行的時候沒有問題。
同樣適用于存儲過程,但是不能勇于數(shù)據(jù)表,特別是當數(shù)據(jù)表有數(shù)據(jù)的時候。(我們曾經(jīng)遇到過,一個成員修改數(shù)據(jù)庫的時候,
重新生成了腳本,結果就把數(shù)據(jù)全部刪掉了)
一般用??
???? IF EXISTS (SELECT name FROM sys.objects? WHERE name = '觸發(fā)器的名字' AND type = 'TR')
??? ??? DROP TRIGGER ’觸發(fā)器名字‘;
??? GO
2.創(chuàng)建:下邊可以開始創(chuàng)建觸發(fā)器
??? Create Trigger 觸發(fā)器名字 On 表
??? FOR/INSTEAD OF/AFTER???????????? ---這里有三個選項:
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? --? for是針對什么的觸發(fā),也就是當執(zhí)行某些操作的時候觸發(fā)(insert,update,delete)
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? --? after是再操作之后觸發(fā),也就是當某些操作執(zhí)行完的時候觸發(fā)(insert,update,delete)
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? --? instead of 是替換這些操作(insert,update,delete)
?? Insert(, Update,delete)可以是一個或者多個的組合
??? AS
??? ?? SQL語句
??? GO
3. 處理
??? 如果是單獨針對某個操作的觸發(fā)器,則不用判斷,否則就是要判斷操作。
??? 在觸發(fā)器里邊,會有兩個臨時表供使用inserted 和deleted
??? 如果是insert 操作,則只會在inserted表里邊有數(shù)據(jù)
??? 如果是delete操作,則只會在deleted表里有數(shù)據(jù)
??? 如果是update操作呢?這里要注意下,update操作的實質,也就是在SQL DBMS的內部,其實還是執(zhí)行了
??? 兩個操作,delete 和insert。所以,如果是update 這兩個臨時表都會有數(shù)據(jù),一個是舊的,一個是新的。
???
??? 如果你明白了這些,就可以處理日常遇到的問題啦
我只寫簡單的應用及經(jīng)驗
1、代碼:寫觸發(fā)器之前一般要判斷該觸發(fā)器是否存在,如果存在則要刪除該觸發(fā)器,這樣可以保證腳本多次運行的時候沒有問題。
同樣適用于存儲過程,但是不能勇于數(shù)據(jù)表,特別是當數(shù)據(jù)表有數(shù)據(jù)的時候。(我們曾經(jīng)遇到過,一個成員修改數(shù)據(jù)庫的時候,
重新生成了腳本,結果就把數(shù)據(jù)全部刪掉了)
一般用??
???? IF EXISTS (SELECT name FROM sys.objects? WHERE name = '觸發(fā)器的名字' AND type = 'TR')
??? ??? DROP TRIGGER ’觸發(fā)器名字‘;
??? GO
2.創(chuàng)建:下邊可以開始創(chuàng)建觸發(fā)器
??? Create Trigger 觸發(fā)器名字 On 表
??? FOR/INSTEAD OF/AFTER???????????? ---這里有三個選項:
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? --? for是針對什么的觸發(fā),也就是當執(zhí)行某些操作的時候觸發(fā)(insert,update,delete)
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? --? after是再操作之后觸發(fā),也就是當某些操作執(zhí)行完的時候觸發(fā)(insert,update,delete)
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? --? instead of 是替換這些操作(insert,update,delete)
?? Insert(, Update,delete)可以是一個或者多個的組合
??? AS
??? ?? SQL語句
??? GO
3. 處理
??? 如果是單獨針對某個操作的觸發(fā)器,則不用判斷,否則就是要判斷操作。
??? 在觸發(fā)器里邊,會有兩個臨時表供使用inserted 和deleted
??? 如果是insert 操作,則只會在inserted表里邊有數(shù)據(jù)
??? 如果是delete操作,則只會在deleted表里有數(shù)據(jù)
??? 如果是update操作呢?這里要注意下,update操作的實質,也就是在SQL DBMS的內部,其實還是執(zhí)行了
??? 兩個操作,delete 和insert。所以,如果是update 這兩個臨時表都會有數(shù)據(jù),一個是舊的,一個是新的。
???
??? 如果你明白了這些,就可以處理日常遇到的問題啦
轉載于:https://www.cnblogs.com/neilvension/archive/2008/07/03/1234868.html
總結
以上是生活随笔為你收集整理的SQL 触发器的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BI三大服务知识点
- 下一篇: 深有体会的积极人生态度