亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQLSever中的觸發器基本語法與作用

2024-08-31 01:03:50
字體:
來源:轉載
供稿:網友
觸發器是一種特殊類型的存儲過程,它不同于之前的我們介紹的存儲過程.觸發器主要是通過事件進行觸發被自動調用執行的。而存儲過程可以通過存儲過程的名稱被調用。本文給大家介紹SQLSever中的觸發器基本語法與作用,感興趣的朋友一起學習吧
 

什么是觸發器?

觸發器是在對表進行插入、更新或刪除操作時自動執行的存儲過程。 觸發器對表進行插入、更新、刪除的時候會自動執行的特殊存儲過程。觸發器一般用在check約束更加復雜的約束上面。觸發器和普通的存儲過程的區別是:觸發器是當對某一個表進行操作。諸如:update、insert、delete這些操作的時候,系統會自動調用執行該表上對應的觸發器。SQL Server 2005中觸發器可以分為兩類:DML觸發器和DDL觸發器,其中DDL觸發器它們會影響多種數據定義語言語句而激發,這些語句有create、alter、drop語句。

SQL Server為每個觸發器都創建了兩個專用表﹕Inserted表和Deleted表。

觸發器通常用于強制業務規則

觸發器是一種高級約束,可以定義比用CHECK 約束更為復雜的約束 :可執行復雜的SQL語句(if/while/case)、可引用其它

表中的列

觸發器定義在特定的表上,與表相關。

自動觸發執行

不能直接調用

是一個事務(可回滾)使用觸發器的好處觸發器可通過數據庫中的相關表實現級聯更改,不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以強制比用CHECK約束定義的約束更為復雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。觸發器也可以評估數據修改前后的表狀態,并根據其差異采取對策。一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應同一個修改語句。

DML觸發器分為:

1、 after觸發器(之后觸發)

a、 insert觸發器

b、 update觸發器

c、 delete觸發器

UPDATE 觸發器創建觸發的語法

CREATE TRIGGER trigger_nameON table_name[WITH ENCRYPTION]FOR [DELETE, INSERT, UPDATE]AST-SQL語句GO

注意:WITH ENCRYPTION表示加密觸發器定義的SQL文本 DELETE, INSERT, UPDATE指定觸發器的類型 insert 觸發器示例

/*創建insert觸發器,在上網記錄表recordInfo上創建插入觸發器*/create trigger tr_insert_recordInfoon recordInfofor insertas/*定義變量,用于臨時存儲插入的會員號、電腦編號和卡的編號*/declare @cardId char()declare @PCId intdeclare @CardNumber char()/*從inserted臨時表中獲取插入的記錄行的信息,包括電腦的編號、卡的編號*/select @PCId=PCId,@cardId=CardId from inserted/*根據電腦編號修改電腦的使用狀態*/update PCInfo set PCUse= where PCId=@PCId/*根據卡的編號查詢會員號*/select @CardNumber=CardNumber from cardinfo where CardId=@cardid/*顯示上機成功的信息*/print '上機成功!會員號是:'+@CardNumber+'機器號是:'+convert(char(),@PCId)go----插入測試數據,會員號為的上機set nocount on --不顯示sql語句影響的記錄行數declare @CardId int ---聲明一個存儲卡的編號的變量---根據會員號查處卡的編號select @cardId=cardid from cardinfo where cardNumber='c' ---向recordInfo表中插入一條記錄信息,卡的編號、電腦編號和上機時間insert into recordInfo(cardId,PCId,beginTime) values(@cardId,,getDate())----查看結果select * from recordInfoselect * from PCInfo

update觸發器示例

---創建delete觸發器,在上網記錄表RecordInfo上創建刪除觸發器create trigger tr_delete_recordInfoon recordInfofor deleteasif exists(select * from sysobjects where name='backRecordInfo')----如果backrecordInfo表存在,就添加記錄即可insert into backRecordInfo select * from deletedelse----創建backRecordInfo表,從deleted中獲取被刪除的數據select * into backRecordInfo from deletedprint'backRecordInfo表備份數據成功,備份表中的數據為:'select * from backRecordInfogo-------關鍵代碼----------測試delete觸發器,刪除數據set nocount ondelete from recordInfo---查看結果print'記錄表中的數據為:'select * from recordInfo

delete觸發器示例

-------關鍵代碼------create trigger tr_update_recordInfoon recordInfofor updateasdeclare @beforePCId intdeclare @afterPCId intselect @beforePCId =PCId from deletedselect @afterPCId=PCID from inserted---根據電腦編號修改使用狀態--------根據以前使用的電腦編號把電腦的使用狀態改為:update PCInfo set PCUse= where PCId=@beforePCId---根據現在使用的電腦編號把電腦的使用狀態改為:update PCInfo set PCUse= where PCId=@afterPCId----顯示電腦換機成功print'換機成功!從'+convert(varchar(),@beforePCId)+'號電腦換到'+convert(varchar(),@afterPCId)+'號電腦'go/*測試update觸發器,修改電腦編號*/--顯示更改前,記錄表中的數據print'更改前,記錄表中的數據'select * from recordInfo--顯示更改前,電腦表中的數據print'更改前,電腦表中的數據'select * from PCInfoset nocount on---把電腦號為的改為update recordInfo set PCId= where PCId= ---查看結果print'更改后,記錄表中的數據'select * from recordInfoprint'更改后,電腦表中的數據'select * from PCInfo

instead of觸發器的使用 instead of觸發器的使用范圍,instead of 觸發器可以同時在數據表和視圖中使用。通常在以下幾種情況下,建議使用instead of觸發器: 數據庫里的數據禁止修改:例如電信部門的通話記錄是不能修改的,一旦修改,則通話費用的計數將不準確。 有可能要回滾修改的SQL語句 在視圖中使用觸發器 用自己的方式去修改數據 instead of觸發器示例

---創建update觸發器,在上網記錄表recordInfo上創建修改(列)觸發器create trigger tr_updateColum1_recordInfoon recordInfoinstead of insertasdeclare @cardbalance int --聲明用于存儲用戶余額的變量declare @CardId int --聲明用于存儲用戶卡的編號的變量declare @PCId int --聲明用于存儲電腦編號的變量---inserted臨時表中獲取插入的記錄行信息,包括電腦編號、卡的編號select @cardId=cardId,@PCId=PCId from insertedselect @cardbalance=cardBalance from cardInfo where CardId=@CardIdprint'您的余額為:'+convert(varchar(10),@cardBalance) ---打印余額信息if(@cardBalance<2) ---判斷余額多少,看能否正常上機print'余額小于元,不能上機。請盡快充值!'else----根據電腦的編號修改電腦的使用狀態更改為正在使用update PCInfo set PCUse=1 where PCId=@PCId----向recordInfo表插入上機記錄insert into recordInfo(cardId,PCId,beginTime)values(@CardId,@PCId,getdate())print'上機成功'-------關鍵代碼------set nocount ondeclare @cardId int ---聲明一個存儲卡的編號的變量---根據會員號查出卡的編號select @cardId=cardId from cardInfo where cardNumber='c001'----向recordInfo表中插入一條記錄信息,卡的編號、電腦的編號和上機時間insert into recordInfo(cardId,PCId,beginTime)values(@cardId,1,getdate())select * from recordInfoselect * from PCInfo

以上所述是小編給大家介紹的SQLSever中的觸發器基本語法與作用的相關內容,希望對大家有所幫助!



注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人伊人精品色xxxx视频| 2019最新中文字幕| 日韩av影院在线观看| 精品一区二区三区三区| 97精品久久久中文字幕免费| 亚洲一区二区三区在线视频| 日本久久久a级免费| 成人午夜激情免费视频| 日韩精品视频在线| 久久综合免费视频| 国产亚洲欧美aaaa| 久久久久久91香蕉国产| 岛国精品视频在线播放| 欧美激情国产日韩精品一区18| 久久97精品久久久久久久不卡| 国产精品免费视频久久久| 久久91精品国产91久久跳| 中文字幕久精品免费视频| 97在线视频一区| 亚洲精品美女视频| 欧美极品美女视频网站在线观看免费| 91精品国产色综合久久不卡98| 亚洲免费一级电影| 97在线精品国自产拍中文| 午夜精品久久久久久99热| 久久国产精品久久精品| 精品成人乱色一区二区| 欧美日韩亚洲一区二区三区| 91久久精品国产| 社区色欧美激情 | 92版电视剧仙鹤神针在线观看| 欧美一级黑人aaaaaaa做受| 啪一啪鲁一鲁2019在线视频| 国产精品一区二区久久| 欧美日韩国内自拍| 日韩美女视频免费在线观看| 97视频国产在线| 久久精品久久久久久| 日韩av网站导航| 色综合久久88色综合天天看泰| 伊是香蕉大人久久| 91高清视频在线免费观看| 96精品视频在线| 亚洲最新在线视频| 欧美猛男性生活免费| 中文字幕精品久久| 欧美—级高清免费播放| 亚洲最新中文字幕| 91亚洲人电影| 国产精品96久久久久久| 91最新国产视频| 日韩欧美亚洲范冰冰与中字| 成人情趣片在线观看免费| 日韩毛片在线观看| 亚洲一区二区日本| 亚洲黄色www网站| 久久久国产成人精品| 亚洲伊人第一页| 精品国模在线视频| 欧美国产视频日韩| 视频一区视频二区国产精品| 亚洲欧美日韩国产中文专区| 在线观看久久久久久| 欧美激情亚洲激情| 欧美大荫蒂xxx| 欧美激情三级免费| 成人网在线免费看| 欧美精品福利在线| 国产精品欧美久久久| 国产69精品久久久久9999| 日韩欧美国产骚| 欧美成人免费小视频| 最近2019中文免费高清视频观看www99| 欧美激情亚洲国产| 欧美日韩视频免费播放| 中文字幕在线观看日韩| 91在线免费视频| 日韩电影第一页| 国产精品爽黄69天堂a| 欧美黄色成人网| 在线观看日韩www视频免费| 亚洲专区中文字幕| 国产精品成人观看视频国产奇米| 中日韩美女免费视频网站在线观看| 国产亚洲人成网站在线观看| 中文字幕亚洲自拍| 日韩精品久久久久久福利| 亚洲新中文字幕| 一区二区三区国产视频| 欧美日韩国产成人在线| 欧美高清在线视频观看不卡| 国产精品久久久久av| 日韩美女激情视频| 亚洲美女自拍视频| 91美女片黄在线观看游戏| 欧美成人精品影院| 欧美午夜精品久久久久久浪潮| 国产日韩欧美在线观看| 国产97色在线|日韩| 欧美在线免费观看| 国产一区二区三区久久精品| 亚洲视频在线播放| 97精品国产aⅴ7777| 亚洲成色999久久网站| 精品亚洲男同gayvideo网站| 国产精品专区h在线观看| 欧美高清在线播放| 欧美日本国产在线| 亚洲欧美日韩直播| 91理论片午午论夜理片久久| 国产精品电影一区| 91久久精品美女高潮| 日韩av电影免费观看高清| 亚洲人成网站777色婷婷| 国产精品jvid在线观看蜜臀| 亚洲人成在线观看| 91av视频导航| 免费不卡欧美自拍视频| 午夜精品理论片| 国产精品视频久久| 亚洲第一区第一页| 欧美黑人极品猛少妇色xxxxx| 国产精品久久在线观看| 2019中文在线观看| 大量国产精品视频| 国产做受高潮69| 亚洲影视中文字幕| 久久免费视频在线| 欧美激情2020午夜免费观看| 精品国产成人在线| 久久久精品国产一区二区| 日韩av片免费在线观看| 日韩av在线免费| 亚洲国产精品专区久久| 国产原创欧美精品| 国产精品美女久久久久久免费| 亚洲肉体裸体xxxx137| 欧美多人爱爱视频网站| 日韩av影院在线观看| 色中色综合影院手机版在线观看| 日韩av在线精品| 成人免费视频网| 国产精品一二区| 4438全国成人免费| 日韩av一区二区在线| 欧美午夜丰满在线18影院| 亚洲欧美日韩一区在线| 亚洲欧美日韩中文视频| 7m精品福利视频导航| 亚洲精品成a人在线观看| 久久久av免费| 亚洲a在线观看| 久久久久久久成人| 国产欧美中文字幕| 国产亚洲欧洲黄色| 欧美午夜精品久久久久久人妖| 国产成人精品亚洲精品| 91av视频在线播放| 91久久久在线| 欧美成人免费在线观看| 91大神在线播放精品| 一本色道久久综合狠狠躁篇怎么玩| 超碰日本道色综合久久综合| 青青草成人在线|