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ā)頻繁建議還是少寫為好,以免造成事件進(jìn)程鎖死。跨服務(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 (取插入行該字段值)
end3.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 (取刪除該字段的值)
end4.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ù))
end5.關(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ù)值,較常見為獲取功能字段供其他表進(jìn)行相應(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-05
SQLServer中的切割字符串SplitString函數(shù)
有時我們要用到批量操作時都會對字符串進(jìn)行拆分,可是SQL Server中卻沒有自帶Split函數(shù),所以要自己來實(shí)現(xiàn)了。沒什么好說的,需要的朋友直接拿去用吧2011-11-11
MSSQL優(yōu)化之探索MSSQL執(zhí)行計(jì)劃(轉(zhuǎn))
最近總想整理下對MSSQL的一些理解與感悟,卻一直沒有心思和時間寫,晚上無事便寫了一篇探索MSSQL執(zhí)行計(jì)劃,本文講執(zhí)行計(jì)劃但不僅限于講執(zhí)行計(jì)劃2011-10-10
SQL Server使用PIVOT與unPIVOT實(shí)現(xiàn)行列轉(zhuǎn)換
這篇文章介紹了SQL Server使用PIVOT與unPIVOT實(shí)現(xiàn)行列轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
SQL Server誤區(qū)30日談 第2天 DBCC CHECKDB會導(dǎo)致阻塞
在SQL Server 2000中,這個命令阻止事務(wù)日志截?cái)鄬?dǎo)致日志不正常增長的相關(guān)問題,但對于SQL Server 2005來說,這個命令就會導(dǎo)致快照相關(guān)的問題(具體請往下看)。2013-01-01
Spark臨時表tempView的注冊/使用/注銷/注意事項(xiàng)(推薦)
transformation是根據(jù)原有RDD創(chuàng)建一個新的RDD,而action則把RDD操作后的結(jié)果返回給driver,這篇文章主要介紹了Spark臨時表tempView的注冊/使用/注銷/注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2022-10-10

