SQL server 三種常用的觸發(fā)器
SQL server 三種常用的觸發(fā)器
1.觸發(fā)器的創(chuàng)建
創(chuàng)建觸發(fā)器時可以先判斷一下當(dāng)前數(shù)據(jù)庫里是否已存在相同名字的觸發(fā)器
sql server的觸發(fā)器名保存在sysobjects這張表里所以要知道是否存在只需創(chuàng)建前查詢下該表即可
if not exists(select 1 from sysobjects where name='sqlserver_test(需創(chuàng)建的觸發(fā)器名稱)' and type='tr')(如果當(dāng)前觸發(fā)器不存在) begin (則創(chuàng)建觸發(fā)器) create trigger sqlserver_test(需創(chuàng)建的觸發(fā)器名) on sqlserver_test_list(當(dāng)此表發(fā)生對應(yīng)的觸發(fā)器事件時觸發(fā)) for update (選擇觸發(fā)器事件) as if update(recommend) (判斷trigger sqlserver_test表的該字段發(fā)生了改變) begin select ‘這是一個觸發(fā)器的測試' (執(zhí)行語句基本上是SQL語句都可以寫,但是注意觸發(fā)器有個執(zhí)行過程如果觸發(fā)器對應(yīng)事件會觸發(fā)頻繁建議還是少寫為好,以免造成事件進程鎖死??绶?wù)器查詢需要服務(wù)器打開MDSTC服務(wù)) end end else 此處還是不寫為好,總不可能當(dāng)前觸發(fā)器存在你寫個刪除語句吧。。。
2.insert觸發(fā)器
顧名思義在對應(yīng)表有數(shù)據(jù)插入時觸發(fā)
create trigger sqlserver_test(需創(chuàng)建的觸發(fā)器名) on sqlserver_test_list(當(dāng)此表發(fā)生對應(yīng)的觸發(fā)器事件時觸發(fā)) for insert (當(dāng)表有插入時觸發(fā)) as select recommend from Inserted (取插入行該字段值) end
3.delete觸發(fā)器
顧名思義在對應(yīng)表有行數(shù)刪除時觸發(fā)
create trigger sqlserver_test(需創(chuàng)建的觸發(fā)器名) on sqlserver_test_list(當(dāng)此表發(fā)生對應(yīng)的觸發(fā)器事件時觸發(fā)) for delete (當(dāng)表有刪除時觸發(fā)) as select recommend from Deleted (取刪除該字段的值) end
4.update觸發(fā)器
顧名思義在對應(yīng)表有行數(shù)更新時觸發(fā)
create trigger sqlserver_test(需創(chuàng)建的觸發(fā)器名) on sqlserver_test_list(當(dāng)此表發(fā)生對應(yīng)的觸發(fā)器事件時觸發(fā)) for update (當(dāng)表有更新時觸發(fā)) as select recommend from Inserted(獲取更新后的數(shù)據(jù)) end
5.關(guān)于取值
1.插入操作(Insert)
Inserted表有數(shù)據(jù),Deleted表無數(shù)據(jù)
提示:
可以用inserted此表獲取需要字段的值去更新其他表數(shù)據(jù)或者插入至其他表中
比較常見的就是作中間表的數(shù)據(jù)轉(zhuǎn)移
2.刪除操作(Delete)
Inserted表無數(shù)據(jù),Deleted表有數(shù)據(jù)
提示:
可以用Deleted此表獲取需要字段的值去更新其他表數(shù)據(jù)或者插入至其他表中,
比較常見的就是做刪除數(shù)據(jù)記錄或備份
3.更新操作(Update)
Inserted表有數(shù)據(jù)(新數(shù)據(jù)),Deleted表有數(shù)據(jù)(舊數(shù)據(jù))
提示:
可以用Deleted此表獲取到修改前表中的數(shù)據(jù)值,比較常見的就是做數(shù)據(jù)修改記錄或備份。用Inserted獲取到修改后的數(shù)據(jù)值,較常見為獲取功能字段供其他表進行相應(yīng)操作執(zhí)行。
到此這篇關(guān)于SQL server 三種常用的觸發(fā)器的文章就介紹到這了,更多相關(guān)SQL server 觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SSMS中出現(xiàn)兩個相同的服務(wù)器名稱的問題解決
在SSMS的【連接到服務(wù)器】頁面,有時候可能會出現(xiàn)多個相同的服務(wù)器名稱本文主要介紹了SSMS中出現(xiàn)兩個相同的服務(wù)器名稱的問題解決,感興趣的可以了解一下2024-05-05SQLServer中的切割字符串SplitString函數(shù)
有時我們要用到批量操作時都會對字符串進行拆分,可是SQL Server中卻沒有自帶Split函數(shù),所以要自己來實現(xiàn)了。沒什么好說的,需要的朋友直接拿去用吧2011-11-11MSSQL優(yōu)化之探索MSSQL執(zhí)行計劃(轉(zhuǎn))
最近總想整理下對MSSQL的一些理解與感悟,卻一直沒有心思和時間寫,晚上無事便寫了一篇探索MSSQL執(zhí)行計劃,本文講執(zhí)行計劃但不僅限于講執(zhí)行計劃2011-10-10SQL Server使用PIVOT與unPIVOT實現(xiàn)行列轉(zhuǎn)換
這篇文章介紹了SQL Server使用PIVOT與unPIVOT實現(xiàn)行列轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05SQL Server誤區(qū)30日談 第2天 DBCC CHECKDB會導(dǎo)致阻塞
在SQL Server 2000中,這個命令阻止事務(wù)日志截斷將會導(dǎo)致日志不正常增長的相關(guān)問題,但對于SQL Server 2005來說,這個命令就會導(dǎo)致快照相關(guān)的問題(具體請往下看)。2013-01-01Spark臨時表tempView的注冊/使用/注銷/注意事項(推薦)
transformation是根據(jù)原有RDD創(chuàng)建一個新的RDD,而action則把RDD操作后的結(jié)果返回給driver,這篇文章主要介紹了Spark臨時表tempView的注冊/使用/注銷/注意事項的相關(guān)資料,需要的朋友可以參考下2022-10-10